1

我使用 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 已安装到机器上的所有用户帐户,但这些合并模块不是,它们仅安装在安装产品的用户帐户上。在其他用户帐户上,会出现一个安装对话框,我相信它正在安装这些合并模块,之后一切正常。如何使这些合并模块安装到所有用户?

PS:MSI 和合并模块中的 ALLUSERS 属性都设置为“1”。

4

2 回答 2

2

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

猜测我的方式,您可能会说文件被安装到安装用户的用户应用程序数据位置之类的地方。如果这是合并模块在其内部指定的内容,那是正常的。即使您正在执行每台机器安装,您显然也可以将文件安装到当前用户的应用程序数据文件夹中。我不能说这些合并模块是否设计正确,但如果是的话:

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

简短的回答是,这可能都按预期工作。

于 2014-02-21T17:44:34.840 回答
1

设置 ALLUSERS 很好。

你所描述的看起来像“广告”。

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

<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>
于 2017-09-11T13:07:36.813 回答