创建MSI并使用Visual Studio强制所有用户

时间:2018-06-28 23:03:51

标签: visual-studio windows-installer installer msiexec visual-studio-setup-proje

我已经使用Visual Studio 2015(带有Visual Studio安装程序插件)创建了一个安装程序。我们的目标是始终使用相同的本地资源运行该APP,无论谁登录,因此我们的目标是[CommonAppDataFolder](在Win10上为C:\ ProgramData ...)。安装程序可以很好地将所有共享资源放在我们需要的地方。但是生成的MSI提供了安装为“所有人”或仅“只是我”的选项

enter image description here

我们要将该选项显示为“仅我”,以灰色显示。 作为MSI生成过程的一部分,是否可以从Visual Studio中执行此操作。

我看到一些解决方案,其中涉及使用不同的参数(例如 ALLUSERS )运行 MSIEXEC ,但是我想知道是否有一种方法可以将其设置为在Visual Studio中自动发生工作室。

谢谢。

2 个答案:

答案 0 :(得分:3)

可以通过在解决方案资源管理器中选择项目,然后选择F4来显示项目属性窗口(非属性)。您可以在那里将InstallAllUsers设置为True。

InstallFolder对话框的“属性”窗口有一个InstallAllUsersVisible,因此只需将其设置为False。

答案 1 :(得分:1)

  

我不使用该特定工具。可能有更好的方法   比下面的“ hack”实现您想要的东西。添加,因为您还没有其他答案。

     

更新:跟随菲尔的答案。我没有检查工具,但看起来不错。留下这个答案只是为了记录。除非您有其他要更改的地方,否则不建议使用。

后处理MSI

隐藏控件 :不太理想,但是如果您不介意对MSI进行后处理(可以通过MSI API编码自动执行),则可以在其中插入一行ControlCondition table以隐藏整个有问题的对话框控件。

临时示例 :在设置的LicenseAgreementDlg中隐藏“返回”按钮-只需添加此行即可(我想其他地方定义的事件可能会显示该行再次):

ControlCondition Table


运行时对话框 :以下是运行时的实际对话框。

Dialog at runtime


MSI API

使以上操作自动化。掌握WiRunSQL.vbs-Windows SDK的一部分-如果已安装Visual Studio,则仅搜索您的SDK文件夹。还有plenty of copies on github

在批处理文件中:

cscript.exe "%~dp0"\WiRunSQL.vbs "MySetup.msi" "INSERT INTO `ControlCondition` (`Dialog_`, `Control_`, `Action`, `Condition`) VALUES ('LicenseAgreementDlg', 'Back', 'Hide', '1')"    
pause

老实说,我也可以在Property table中对ALLUSERS=1进行硬编码。