【问题标题】:Launch bat with CustomAction使用 CustomAction 启动 bat
【发布时间】:2015-07-06 10:04:12
【问题描述】:

我有我的 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 打开并通知“找不到指定的路径”但路径是正确的。 我不明白为什么找不到批处理文件。

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

谁有办法?

编辑 1: 我试过ExeCommand="cmd.exe /k cd rep " 我有“找不到指定的路径”

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

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

【问题讨论】:

  • 尝试使用ExeCommand='cmd.exe /k "C:\rep\file\script.bat"' - 这仍然是有效的 xml,并且没有 xml 转义可能损害 cmd 命令的引号。
  • @npocmaka 不,仍然是相同的消息。

标签: batch-file command-line wix custom-action


【解决方案1】:

当 bat 文件为“以管理员身份运行”时,当前目录可能会按设计发生更改。将此添加到 bat 文件的开头以进行验证:

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

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

【讨论】:

  • 我试过了,但我总是收到相同的消息“找不到指定的路径”。我认为 wix 想在部署之前执行我的 .bat。
  • 您的 Edit 1 和 Edit 2 示例的末尾有一个空格...就在结尾“之前”。删除该空格。
  • 你看到你对 echo(cd=%cd% & pause 的期望了吗?当前目录可能被 Directory="WINDOWSVOLUME" 设置不正确
【解决方案2】:

我终于找到了解决办法。

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

使用“InstallFinalize”,CustomAction 在安装的最后执行。之前的“shell”找不到批处理文件,因为他还没有被部署。

【讨论】:

  • 你的意思是“InstallFinalize”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-20
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 2011-07-11
  • 1970-01-01
相关资源
最近更新 更多