【发布时间】:2012-11-30 12:38:56
【问题描述】:
WIX documentatino on Shortcut element 说关于目标属性:
The value will be defaulted to the parent File when nested under a File element.
但是代码
<Component Guid="MY_GUID" Id="MyAppComponent">
<File Source="SomeDll.dll" Name="SomeDll.dll" Id="SomeDll.dll" KeyPath="yes" />
<File Source="MyDll.exe" Name="MyDll.exe" Id="MyDll.exe" />
<Shortcut Id="MyApp.Shortcut" Directory="ApplicationProgramMenuDir" WorkingDirectory="INSTALLDIR" Name="MyApp" Icon="ProgramIcon.ico" Advertise="yes" />
</File>
</Component>
没有按预期工作 - 指向 dll 文件的快捷方式并运行它会显示 Windwos 错误消息,它无法启动具有 dll 扩展名的文件。
要解决这个问题,我们需要做的唯一不同是:为 exe 文件而不是 dll 设置 KeyPath="yes" 属性:
<Component Guid="MY_GUID" Id="MyAppComponent">
<File Source="SomeDll.dll" Name="SomeDll.dll" Id="SomeDll.dll"/>
<File Source="MyDll.exe" Name="MyDll.exe" Id="MyDll.exe" KeyPath="yes" />
<Shortcut Id="MyApp.Shortcut" Directory="ApplicationProgramMenuDir" WorkingDirectory="INSTALLDIR" Name="MyApp" Icon="ProgramIcon.ico" Advertise="yes" />
</File>
</Component>
所以 WIX 文档包含错误? Target 不是设置为父 File 元素,而是设置为祖先的 Component 的 KeyPath?
还是我的错误和我的代码有问题?
【问题讨论】:
-
不确定 WiX 方面,所以只是指出这一点:您的组件的结构不符合 msdn.microsoft.com/en-us/library/windows/desktop/aa368269.aspx #3 的建议“为每个 .exe、.dll 和 .ocx 定义一个新组件文件。将这些文件指定为其组件的关键路径文件。"
-
这是一个很好的建议。我已经有几次想要实现这个但还没有时间。虽然这不是一项要求 - 仅建议确保在执行安装程序次要升级或补丁逻辑时正确更新所有文件。我进行了重大升级,因此将所有文件夹文件放在单个组件中还没有造成任何问题。