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

时间:2014-02-21 10:31:14

标签: wix vsix merge-module

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

<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”。

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

设置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>