3

我有一个 permachine MSI 安装程序,我正在将其转换为每用户安装程序,它将文件安装到 LocalAppDataFolder。

为了摆脱 ICE38 警告,我添加了一个注册表作为键路径。问题出在我的一个组件中,我有一个广告快捷方式和 ProgId。

我现在得到:

  • ICE19 - “设置”宣传组件:“CMP_Rapid”。由于 KeyPath 类型不允许此组件,因此无法发布此组件
  • ICE19 - 快捷方式:“SHC_RunConfigExe”宣传组件:“CMP_Rapid”。由于 KeyPath 类型不允许该组件,因此无法通告该组件。
  • ICE50 - 组件“CMP_Rapid”有一个广告快捷方式,但找不到 KeyPath。

安装到 LocalAppDataFolder 时,是否有在每个用户安装中做广告?我对广告不是很熟悉。在快捷方式上我使用它是因为我喜欢它提供的修复功能。在 progId 上我使用它是因为它会在安装后自动更新相应的图标。

我需要在 XP 和 Vista 上安装它,这样我才能使用 Windows 7 解决方案:ProgramFilesFolder 重定向。

以下是生成错误的组件:

<DirectoryRef Id="INSTALL_FOLDER">
      <Component Id="CMP_Rapid"
                 Guid="{9373A11C-5A3C-49E3-963D-C19B765A4285}">

        <File Id="FILE_Rapid"
              Source="$(var.FilePath)\Dynagen Configurator.exe">
        </File>

        <Shortcut Id="SHC_RunConfigExe"
                Name="DYNAGEN Configurator"
                Description="Opens DYNAGEN Configurator application." 
                Directory="ConfigShortCutDir"
                WorkingDirectory="INSTALL_FOLDER"
                Icon="ICO_RunConfigExe.exe"
                Advertise="yes"/>

        <ProgId Id="Rapid.drcS" Icon="ICO_drcS.ico" Advertise="yes">
          <Extension Id="settings">
            <Verb Id="Open" Command="Open" Argument="/so &quot;%1&quot;" />
            <Verb Id="Edit" Command="Edit" Argument="/edit &quot;%1&quot;"/>
            <Verb Id="Program" Command="Program" Argument="/program &quot;%1&quot;"/> 
          </Extension>
        </ProgId>

        <RegistryValue Root="HKCU"
                       Key="Software\Dynagen\DynagenConfigurator"
                       Name="CMP_Rapid"
                       Type="integer"
                       Value="1"
                       KeyPath="yes"
                       />

      </Component>
    </DirectoryRef>
4

1 回答 1

2

通过使注册表项成为键路径错误来满足 ICE38 的要求。正确的做法是忽略 ICE38 错误,但进入 wix 属性页面并在“禁止特定 ICE 验证”旁边添加 ICE38 和 ICE91。

Microsoft 或 Wix 对纯按用户安装没有理想的支持。我什至在网上找不到任何好的例子。

WiX-users@lists.sourceforge.net 的 Bryan 帮助我解决了这个问题:

既然如此,ICE38(在我看来)是不正确的,你会想忽略它。ICE38 意味着您在每台机器安装的上下文中安装每用户资源,但从不验证是否如此。

实际上,为每个用户编写安装需要您忽略 ICE38,因为它对于那个世界永远不会准确。

一旦我忽略了上述工作。

[编辑]

也可以在这里查看我的答案。事实证明,您需要注意一些边缘情况。

于 2014-02-11T23:55:07.963 回答