为所有使用WiX的用户安装合并模块



我使用WiX创建了一个安装程序来安装VSIX以及两个相关组件。这两个组件以合并模块的形式提供给我。以下是我在代码中使用合并模块的代码:

<DirectoryRef Id="TARGETDIR">
<Merge Id="MergeModuleID1" SourceFile="MergeModule1.msm" DiskId="1"  Language="0"/>
<Merge Id="MergeModuleID2" SourceFile="MergeModule2.msm" DiskId="1" Language="0" />
</DirectoryRef>

我把这些合并模块称为:

<Feature Id="ProductFeature" Title="Title" Level="1">
<ComponentRef Id="VSPackage"/>
<ComponentRef Id="ApplicationShortcut"/>
<ComponentRef Id="DesktopShortcut"/>
<ComponentRef Id="LicenseComp"/>
<MergeRef Id="MergeModuleID1"/>
<MergeRef Id="MergeModuleID2"/>
</Feature>

我面临的问题是,我的VSIX安装在机器上的所有用户帐户上,但这些合并模块没有,它们只安装在安装产品的用户帐户上。在其他用户帐户上,会出现一个安装对话框,我认为这是在安装这些合并模块,之后一切正常。如何将这些合并模块安装到所有用户?

p.S:MSI和合并模块中的ALLUSERS属性都设置为"1"。

您可能需要稍微澄清一下这个问题。合并模块没有安装,只有文件,所以你的意思是合并模块中的文件不正确,是吗?此外,文件没有安装在用户帐户上,而是安装到磁盘上的某个位置。

根据我的猜测,你可能是说文件被安装到了安装用户的"用户应用程序数据"位置。如果这就是合并模块在其内部指定的内容,那么这是正常的。很明显,即使是按机器安装,也可以将文件安装到当前用户的应用程序数据文件夹中。我不能说这些合并模块的设计是否正确,但如果正确的话:

  1. 初始安装会将这些文件放在安装用户文件的位置
  2. 如果其他用户登录并使用快捷方式,并且您的MSI设计正确,则按需安装功能将在该用户的文件夹中为该用户安装这些文件,可能会要求提供原始安装介质。这就是设计的工作方式,因为:a) 没有任何机制允许将文件同时安装到系统上的所有用户文件位置,而且如果他们从不使用该应用程序,这也毫无意义。b) 如果您在产品安装后创建了一个新的用户帐户,会发生什么?该文件不会在该用户的位置,但按需安装方案保证,如果新用户登录并使用该应用程序,他们将在自己的位置获得该文件

简短的回答是,这可能都按预期进行。

设置ALLUSERS很好。

你所描述的看起来像是"广告"。

要删除合并模块的广告,请在包含MergeRef元素的功能的属性中添加AllowAdvertise="no":

<Feature Id="ProductFeature" Title="Title" AllowAdvertise="no" Level="1">
<ComponentRef Id="VSPackage"/>
<ComponentRef Id="ApplicationShortcut"/>
<ComponentRef Id="DesktopShortcut"/>
<ComponentRef Id="LicenseComp"/>
<MergeRef Id="MergeModuleID1"/>
<MergeRef Id="MergeModuleID2"/>
</Feature>

最新更新