Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用相对路径在WiX安装程序中创建符号链接_Wix_Windows Installer_Symlink_Mklink - Fatal编程技术网

使用相对路径在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

我一直在尝试做一些事情,比如在WiX安装程序中创建符号链接。它解释了如何制作一个附加组件来创建一个符号链接。然而,这不是我想要的。我正试着用这种剪发的方式

<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>