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
元素。如果您的UIRef
是Product
的子级,那么它肯定会被链接进来。然后链接器会遍历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 未正确链接的主要内容,如果未能解决你的问题,请参考以下文章