1

Shortcut 元素上的WIX文档说明了 Target 属性:

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?

还是我的错误和我的代码有问题?

4

1 回答 1

0

尝试添加这样的<RegistryValue>标签:

<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>
    <RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]\setup" Name="Shortcut" Type="integer" Value="1" KeyPath="yes" />
</Component>

如果你InstallScopeperUser,使用HKCU

如果你InstallScopeperMachine,使用HKLM

于 2012-11-30T22:16:55.720 回答