使用 CustomAction 启动 bat
Launch bat with CustomAction
我有我的 Wix 文件 (.wxs) 和我的 CustomAction :
...
<CustomAction Id="shellex" Directory="WINDOWSVOLUME" Impersonate="no" ExeCommand="cmd.exe /k "C:\rep\file\script.bat" " 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"找不到批处理文件,因为他还没有部署。
我有我的 Wix 文件 (.wxs) 和我的 CustomAction :
...
<CustomAction Id="shellex" Directory="WINDOWSVOLUME" Impersonate="no" ExeCommand="cmd.exe /k "C:\rep\file\script.bat" " 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"找不到批处理文件,因为他还没有部署。