使用相对路径在WiX安装程序中创建符号链接
我一直在尝试做一些事情,比如在WiX安装程序中创建符号链接。它解释了如何制作一个附加组件来创建一个符号链接。然而,这不是我想要的。我正试着用这种剪发的方式使用相对路径在WiX安装程序中创建符号链接,wix,windows-installer,symlink,mklink,Wix,Windows Installer,Symlink,Mklink,我一直在尝试做一些事情,比如在WiX安装程序中创建符号链接。它解释了如何制作一个附加组件来创建一个符号链接。然而,这不是我想要的。我正试着用这种剪发的方式 <CustomAction Id="MakeSymbolicLink" Directory="TARGETDIR" ExeCommand="cmd /c mklink .\linkToItem.lnk '%CommonProgramFiles(x86)%\Addition
<CustomAction Id="MakeSymbolicLink"
Directory="TARGETDIR"
ExeCommand="cmd /c mklink .\linkToItem.lnk '%CommonProgramFiles(x86)%\Additional Folders\myexecutable.exe'" />
我以前也尝试过调用这个函数,我得到了相同的行为
我的目标是通过这个设置创建符号链接。
我的另一个解决方案是能够创建一个快捷方式,但是除了“开始”菜单或桌面之外,我还没有找到更多关于如何在其他位置执行此选项的信息
当我在添加这些行之后运行安装程序时,它无法执行这些行。如果不调用符号链接自定义操作,我可以让安装程序成功完成
最终目标是获得从公共可执行文件到应用程序安装位置的符号链接
更新
我得到了工作更改的符号链接自定义操作现在看起来像:
<CustomAction Id="MakeSymbolicLink"
Directory="TARGETDIR"
ExeCommand='cmd /c mklink .\linkToItem.lnk "%CommonProgramFiles(x86)%\Additional Folders\myexecutable.exe"'
Execute="deferred"
Impersonate="no"/>
对自定义操作的调用如下所示:
<Custom Action="MakeSymbolicLink" After="InstallFinalize" />
<Custom Action="MakeSymbolicLink" Before="InstallFinalize" />
但是现在,当我运行卸载时,我收到以下错误消息:
此windows installer软件包有问题。作为安装程序一部分运行的程序未按预期完成。请与您的支持人员或软件包供应商联系。
如果您将类似的内容用作自定义操作:
<CustomAction Id="MakeSymbolicLink"
Directory="TARGETDIR"
ExeCommand='cmd /c mklink .\linkToItem.lnk "%CommonProgramFiles(x86)%\Additional Folders\myexecutable.exe"'
Execute="deferred"
Impersonate="no"/>
这确保只有在应用程序安装时才执行此操作,如果您希望在重新安装时执行此操作,或者您可能需要进一步了解如何执行此操作的其他选项
如果确保在用户卸载应用程序后留下零占用空间,则需要在卸载后删除符号链接。
我通过以下方法解决了这个问题:
首先,我创建了另一个CustomAction
<CustomAction Id="RemoveSymbolicLink"
Directory="TARGETDIR"
ExeCommand='cmd /c DEL .\linkToItem.lnk '
Execute="deferred"
Impersonate="no"/>
为什么对.lnk文件使用相对路径会使思考复杂化?您是否尝试使用绝对路径?我还认为你的报价错了。使用单外引号(
execomand='something'
)和双内引号(用于路径)。@zett42我已尝试使用这两种引号设置,但都不适用于我。我尝试使用公共文件所在位置的绝对路径,但不使用.lnk文件本身。execomand
现在是='cmd/c mklink.\linkToItem.lnk“c:\Program Files(x86)\Common Files\Additional Folders\myexecutable.exe”
运行安装程序时,我瞥见一个cmd窗口,上面说权限被拒绝。
<CustomAction Id="RemoveSymbolicLink"
Directory="TARGETDIR"
ExeCommand='cmd /c DEL .\linkToItem.lnk '
Execute="deferred"
Impersonate="no"/>
<Custom Action="RemoveSymbolicLink" After="InstallInitialize">Installed AND NOT REINSTALL</Custom>