wix - 是否可以为每个用户 MSI 提供广告快捷方式和 ProgId?

标签 wix windows-installer windows-vista windows-xp-sp3 wix3.8

我有一个 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>

最佳答案

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

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

WiX-users@lists.sourceforge.net 的 Bryan 在这方面帮助了我:

Since that is the case, ICE38 is (in my opinion) incorrect and you will want to ignore it. ICE38 implies you are installing per-user resources in the context of a per-machine installation but never verifies that this is so.

Actually authoring a per-user install requires that you ignore ICE38 because it won't ever be accurate for that world.

一旦我忽略了上面的工作。

[编辑]

参见 my answer here以及。事实证明,您需要注意一些边缘情况。

关于wix - 是否可以为每个用户 MSI 提供广告快捷方式和 ProgId?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21490035/

相关文章:

c# - Wix 卸载整个网站而不仅仅是应用程序

tags - WIX:我可以在安装时通过命令提示符设置升级指南吗?

windows - 从 MSI 文件中查找 GUID

C++:在 Vista 上获取网络适配器的 MAC 地址?

c# - 以编程方式在 vista 中以管理员身份运行 cmd.exe,C#

wix - 部署工具基础的源代码是否可用?

Wix、加热和 Wxi 锉刀

c# - 从安装程序自定义操作运行 Entity Framework 迁移

windows - 在使用 Wix 的 MSI 中自定义操作出错时显示最终用户消息

c# - 如何处理失败的 DllImport?