使用相对路径在WiX安装程序中创建符号链接

时间:2018-08-01 22:44:33

标签: wix windows-installer symlink mklink

我一直在尝试进行类似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之前调用它,并且得到相同的行为。

我的目标是通过此设置创建符号链接。 我拥有的另一种解决方案是能够创建快捷方式,但是除了开始菜单或桌面之外,我无法找到更多关于如何执行此选项的方法

添加这些行后运行安装程序时,它无法执行。如果没有调用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.

1 个答案:

答案 0 :(得分:1)

如果您将类似这样的内容用作“自定义”操作:

<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来执行此操作。但是,我只需要在卸载时运行它,因此它需要一个不同的条件才能做到这一点,就像这样:

<Custom Action="RemoveSymbolicLink" After="InstallInitialize">Installed AND NOT REINSTALL</Custom>