我一直在尝试做类似here发布的有关在 WiX 安装程序中创建符号链接的操作。它解释了如何创建一个可以创建符号链接的附加组件。但这不是我想要的。我正在尝试使用像这样剪切的东西
<CustomAction Id="MakeSymbolicLink"
Directory="TARGETDIR"
ExeCommand="cmd /c mklink .\linkToItem.lnk '%CommonProgramFiles(x86)%\Additional Folders\myexecutable.exe'" />
我尝试使用
cmd.exe
而不是 cmd 来实现此目的,但没有成功。
然后我像这样调用自定义操作:
<Custom Action="MakeSymbolicLink" After="InstallFinalize" />
我之前也尝试过调用此方法,并且我得到了相同的行为。
我的目标是通过此设置创建符号链接。 我拥有的另一个解决方案是能够创建快捷方式,但是我找不到太多关于如何在开始菜单或桌面以外的地方执行此选项的信息当我添加这些行后运行安装程序时,它无法执行它们。在不调用符号链接自定义操作的情况下,我可以让安装程序成功完成。
最终目标是获得从通用文件可执行文件到应用程序安装位置的符号链接。
更新
InstallFinalize
以及对自定义操作的调用,如下所示:
<CustomAction Id="MakeSymbolicLink"
Directory="TARGETDIR"
ExeCommand='cmd /c mklink .\linkToItem.lnk "%CommonProgramFiles(x86)%\Additional Folders\myexecutable.exe"'
Execute="deferred"
Impersonate="no"/>
但是现在当我运行卸载时,我收到以下错误消息:
<Custom Action="MakeSymbolicLink" Before="InstallFinalize" />
There is a problem with this windows installer package. a program run as part of the setup did not finish as expected contact your support personnel or package vendor.
在您的
<CustomAction Id="MakeSymbolicLink"
Directory="TARGETDIR"
ExeCommand='cmd /c mklink .\linkToItem.lnk "%CommonProgramFiles(x86)%\Additional Folders\myexecutable.exe"'
Execute="deferred"
Impersonate="no"/>
中需要:
InstallExecuteSequence
这可确保仅在安装应用程序时执行。如果您想在重新安装或其他选项时执行此操作,您可能需要进一步了解如何执行此操作
如果确保在用户卸载应用程序后留下零足迹,您将需要随后删除符号链接。 我通过执行以下操作解决了这个问题:
首先我创建了另一个
<Custom Action="MakeSymbolicLink" Before="InstallFinalize">NOT Installed</Custom>
CustomAction
然后我需要另一个
<CustomAction Id="RemoveSymbolicLink"
Directory="TARGETDIR"
ExeCommand='cmd /c DEL .\linkToItem.lnk '
Execute="deferred"
Impersonate="no"/>
来执行此操作。然而,我只需要在卸载时运行它,所以它需要一个不同的条件来做到这一点,所以这个看起来像:
InstallExecuteSequence