【问题标题】:Confusing behavior of the .bat file execution from the finish page of NSIS installer从 NSIS 安装程序的完成页面执行 .bat 文件的令人困惑的行为
【发布时间】:2015-03-27 10:55:31
【问题描述】:

我想让用户通过安装完成页面中的 .bat 文件执行已安装的应用程序。代码如下:

!define INSTALL_DIR $PROGRAMFILES64\(some folder) !define MUI_FINISHPAGE_RUN_FUNCTION "LaunchLink" Function LaunchLink SetOutPath "${INSTALL_DIR}" ExpandEnvStrings $0 %COMSPEC% Exec '"$0" /C "${INSTALL_DIR}\my.bat"' FunctionEnd

它在大多数情况下都按预期工作。但如果我同时拥有:
C:\Program Files\(some folder)
C:\Program Files (x86)\(some folder) >
使用 my.bat 文件,我可以在 Program Files (x86) 中执行。我还尝试硬编码 .bat 文件的确切路径,而不是使用 ${INSTALL_DIR} 常量,但仍然是同样的问题。

我究竟做错了什么?我错过了什么吗?

【问题讨论】:

  • 如果您将 /C 更改为 /K,您可以在 Process Explorer 中检查 cmd.exe 的命令行。 NSIS 是否将正确的路径传递给您的批处理文件?

标签: batch-file 32bit-64bit nsis


【解决方案1】:

您可以在 bat 文件中检查系统是 x32 还是 x64,如果您在 x64 系统上,则将对 x32 文件的调用委托给 x64 文件:

IF %PROCESSOR_ARCHITECTURE% == x86
(
    START "" C:\pathto\x86version.exe
) ELSE (
    START "" C:\pathto\x64version.exe
)

%PROCESSOR_ARCHITECTURE%是一个系统变量。

【讨论】:

  • 感谢您的回复,但目的是防止错误的.bat被执行,而不是为错误的.bat添加一些变通方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-05
  • 1970-01-01
  • 1970-01-01
  • 2020-04-07
  • 2011-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多