使用 CustomAction 启动 bat

Launch bat with CustomAction

我有我的 Wix 文件 (.wxs) 和我的 CustomAction :

...
<CustomAction Id="shellex" Directory="WINDOWSVOLUME" Impersonate="no" ExeCommand="cmd.exe /k &quot;C:\rep\file\script.bat&quot; " Return="asyncNoWait" />
<InstallExecuteSequence>
<Custom Action="shellex" After="InstallFiles" />
</InstallExecuteSequence>
...

但是当我执行我的 wixinstaller 时,一切都很好,除了带有 cmd.exe 的 CustomAction 打开并通知 "The specified path was not found" 但路径是正确的。 我不明白为什么找不到批处理文件。

添加 详细信息:我的 .bat 是使用安装程序部署的。

有人有解决方案吗?

编辑 1 : 我试过了 ExeCommand="cmd.exe /k cd rep " 我有 "The specified path was not found"

编辑 2 : 我试过了 ExeCommand="cmd.exe /k dir /s A:D >out.txt " 我看到文件夹 /rep/ 在 .bat 执行时不存在。 /rep/ 是使用安装程序创建的。

属性 After="InstallFiles" 不起作用?

当一个 bat 文件是 'Run as administrator' 时,当前目录可能被设计更改了。将此添加到您的 bat 文件的开头以验证:

echo(cd=%cd% & pause
pushd %~dp0
echo(cd=%cd% & pause

您可能会看到显示的第一张 CD 不是您所期望的,而第二张是正确的。如果是这种情况,请删除上面的第一行和第三行。 pushd 行将 CD 设置为原始目录。

终于找到解决办法了。

解决方案是将 After="InstallFiles" 更改为 After="InstallFinalize"

对于 "InstallFinalize",CustomAction 在安装结束时执行。之前"shell"找不到批处理文件,因为他还没有部署。