Visual Studio安装程序项目-系统和用户安装程序在同一MSI文件中



我使用的是Microsoft Visual Studio 2019和Microsoft Visual Studio安装程序项目V1.0.2。

我知道如何生成系统范围的安装程序:

设置项目的
  • InstallAllUsers属性设置为true
  • CCD_ 3用户界面的CCD_ 2属性设置为false
  • CCD_ 5的CCD_ 4被设置为CCD_

我也很清楚如何在不需要管理员提升的情况下生成用户安装程序

安装项目的InstallAllUsers属性设置为false
  • Installation Folder用户界面的InstallAllUserVisible属性设置为false
  • CCD_ 11的CCD_ 10被设置为CCD_
  • PostBuildEvent:"%ProgramFiles%Windows Kits10binx86MsiInfo.exe" "$(BuiltOuputPath)" /w 10
  • 请参阅https://stackoverflow.com/a/55700346/7556646和https://superuser.com/a/1633474/738960.

    现在我问自己以下问题:

    1. 是否有可能将系统安装程序和用户安装程序放在同一msi文件和同一安装项目中?

    2. 是否可能基于InstallAllUsers属性设置Application FolderDefaultLocation?当InstallAllUserVisible属性设置为true时,可以在Installation Folder用户界面中更改InstallAllUsers属性。

    3. 对于系统范围的安装来说,上面的生成后事件会是一个问题吗?

    1. 是的,事实上,这是构建MSI包的正常方式,以便系统管理员可以选择适合其环境的安装类型。在安装程序的初始UI阶段,或者通过无人参与安装的属性,管理员将选择他们是否想要";"只有我";或一个";所有用户";安装虽然很少使用,但还有其他安装选项,如基于网络的管理安装点安装,管理员可能也希望看到您支持这些安装选项。

    2. 是的,但不要那样做。目标文件夹应该由命令行或UI设置,而不是由包设置。有关更多详细信息,请参阅TARGETDIR属性文档。默认情况下,Windows安装程序将根据包中已有的属性构造一个合适的位置。

    请注意,TARGETDIR属性的值通常设置在命令行或通过用户界面。设置TARGETDIR的依据不建议在"属性"表中编写路径,因为计算机在本地驱动器的设置上有所不同。

    1. 不,如果您打算设置按用户安装的首选项,那么您已经正确地完成了此操作。通常,您会显示一个UI对话框来选择安装类型,然后为安装的执行阶段设置ALLUSERS属性。管理员非常熟悉设置ALLUSERS来选择他们想要的安装类型。通过在构建中为他们这样做,您将按用户安装作为默认设置,并通过命令行屏蔽(可能(支持所有用户安装。该文档提供了抑制UAC提示所需步骤的附加信息,从而增强了每个用户的安装体验

    要在安装应用程序时抑制UAC对话框的显示,请使用>包的作者应该做以下事情:

    在Windows Vista上使用Windows Installer 4.0或更高版本安装应用程序。不要依赖于使用提升的系统权限在>计算机

    在每个用户上下文中安装应用程序,并将其设为默认值>包的安装上下文。如果未设置ALLUSERS属性,则>安装程序在每个用户的上下文中安装程序包。如果不包括>ALLUSERS属性,安装程序不设置此属性>因此每个用户的安装成为默认的安装上下文。您可以>通过在命令行上设置ALLUSERS属性来覆盖此默认值。在字计数摘要属性中设置位3以指示提升的特权>不需要安装应用程序。

    最新更新