使用相对路径在 WiX 安装程序中创建符号 link
Creating a symbolic link in a WiX installer using relative paths
我一直在尝试做一些类似 here 发布的关于在 WiX 安装程序中创建符号 link 的事情。它解释了如何制作一个可以制作符号 link 的附加组件。然而,这不是我想要的。我正在尝试使用像这样的剪辑
<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
之前也试过调用它,我得到了同样的行为。
我的目标是通过此设置创建符号 link。
我拥有的另一个解决方案是能够创建快捷方式,但是除了开始菜单或桌面
当我 运行 添加这些行后安装程序无法执行它们。如果没有调用 Symbolic link 自定义操作,我可以让安装程序成功完成。
最终目标是从通用文件可执行文件中获取符号 link 到应用程序的安装位置。
更新
我让 Symbolic link 工作更改自定义操作现在看起来像:
<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>
如果您想在重新安装或其他选项时执行此操作,这将确保仅在安装您的应用程序时执行此操作,您可能需要进一步研究如何执行此操作
如果确保在用户卸载应用程序后留下零足迹,您将需要在之后删除符号 link。
我通过执行以下操作解决了这个问题:
首先我创建了另一个CustomAction
<CustomAction Id="RemoveSymbolicLink"
Directory="TARGETDIR"
ExeCommand='cmd /c DEL .\linkToItem.lnk '
Execute="deferred"
Impersonate="no"/>
然后我需要另一个 InstallExecuteSequence
来执行它。但是我只需要在卸载时 运行 这个,所以它需要一个不同的条件来做到这一点,所以这个看起来像:
<Custom Action="RemoveSymbolicLink" After="InstallInitialize">Installed AND NOT REINSTALL</Custom>
我一直在尝试做一些类似 here 发布的关于在 WiX 安装程序中创建符号 link 的事情。它解释了如何制作一个可以制作符号 link 的附加组件。然而,这不是我想要的。我正在尝试使用像这样的剪辑
<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
之前也试过调用它,我得到了同样的行为。
我的目标是通过此设置创建符号 link。 我拥有的另一个解决方案是能够创建快捷方式,但是除了开始菜单或桌面
当我 运行 添加这些行后安装程序无法执行它们。如果没有调用 Symbolic link 自定义操作,我可以让安装程序成功完成。
最终目标是从通用文件可执行文件中获取符号 link 到应用程序的安装位置。
更新
我让 Symbolic link 工作更改自定义操作现在看起来像:
<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>
如果您想在重新安装或其他选项时执行此操作,这将确保仅在安装您的应用程序时执行此操作,您可能需要进一步研究如何执行此操作
如果确保在用户卸载应用程序后留下零足迹,您将需要在之后删除符号 link。 我通过执行以下操作解决了这个问题:
首先我创建了另一个CustomAction
<CustomAction Id="RemoveSymbolicLink"
Directory="TARGETDIR"
ExeCommand='cmd /c DEL .\linkToItem.lnk '
Execute="deferred"
Impersonate="no"/>
然后我需要另一个 InstallExecuteSequence
来执行它。但是我只需要在卸载时 运行 这个,所以它需要一个不同的条件来做到这一点,所以这个看起来像:
<Custom Action="RemoveSymbolicLink" After="InstallInitialize">Installed AND NOT REINSTALL</Custom>