WiX 3.7 UI 未正确链接

Posted

技术标签:

【中文标题】WiX 3.7 UI 未正确链接【英文标题】:WiX 3.7 UI not linking correctly 【发布时间】:2013-04-11 07:45:23 【问题描述】:

这里是 WiX 的新手...我已经创建了我的 WiX 安装程序包,它可以正确安装所有功能。然后我尝试使用以下内容向其添加 UI:

<UIRef Id="WixUI_Minimal" /> 
<UIRef Id="WixUI_ErrorProgressText" />

我链接到“light -ext WixUIExtension -cultures:en-us”。它找到了这个扩展,因为如果我用一个不存在的名称尝试它会出错,但生成的 msi 包只有 30kb。如果正确链接 UI 扩展,我认为这应该稍大一些?

当我运行 msi 时,它只提供正常的进度条,没有我期望 WixUI_Minimal 提供的其他 UI。

所有参考资料似乎都声称,当包正确链接时,您只需要一个简单的 UIRef 即可获得 UI……是否有一种已知的方法可以使链接无法正确发生而不会引发错误(即使我与 -pedantic 链接)?

【问题讨论】:

您是否为 UI dll 添加了引用? 【参考方案1】:

添加 UI 后,MSI 可能不会明显变大。默认提供的图形不多。但是,如果您在安装过程中没有看到 UI,这确实意味着该 UI 没有被链接。

UIRef 需要在引用的部分中。链接器开始的第一部分是Product 元素。如果您的UIRefProduct 的子级,那么它肯定会被链接进来。然后链接器会遍历Product 元素中的所有引用(任何以Ref 结尾的内容都是引用,与许多其他元素一样)属性)在其他 Fragment 元素中寻找所需的元素。然后,链接器会拉入那些 Fragment 元素中的所有内容。例如:

<Product>
   <DirectoryRef Id='TARGETDIR' />
</Product>

<Fragment>
    <Directory Id='TARGETDIR' Source='SourceDir' />

    <BinaryRef Id='icon' />
<Fragment>

<Fragment>
    <Binary Id='icon' Source='path\to\my.ico' />
</Fragment>

<Fragment>
   <UIRef Id='WixUI_Minimal' />
</Fragment>

在上面的示例中,前三个部分将包含在链接器中。但是,UIRef='WixUI_Minimal' 的部分被省略了,因为没有任何引用它。要修复它,可以将 UIRef 移动到任何其他 Fragment 元素。

要进行测试,请尝试将您的 UIRef 移动到您的 Product 元素。如果这不起作用,请在您的问题中提供更多详细信息,说明您的 UIRef 在哪里,以便我们进一步提供帮助。

【讨论】:

嘿,今天早上我从一个非常非常简单的示例开始,并试图看看哪里出了问题,这就是我试图构建这个项目的方式。我有一个批处理文件,在其中我用 -arch x86 然后 -arch x64 对它运行了两次蜡烛,然后将两个 obj 文件链接到它们自己的 msi。如果我轻装上阵,然后立即在 32 位上点灯,它会给我一个正确的 MSI 和最小的 UI。但是 64 位的仍然显然是不正确的。在 32 位平台上构建 64 位 msi 并与 WixUIExtension 链接是可能的,不是吗?

以上是关于WiX 3.7 UI 未正确链接的主要内容,如果未能解决你的问题,请参考以下文章

未设置 WiX 卸载 UI 属性

WIX:在单独的 cab 文件中升级未版本控制的文件

Jquery UI Datepicker 日历未按预期工作

卸载升级时如何摆脱wix中未使用的dll

Grails 未正确编码 unicode 字符

材质 UI 月份选择器未显示正确的 UI