0

我一直在尝试做一些类似这里发布的关于在 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.

4

1 回答 1

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>
于 2018-08-10T20:33:59.023 回答