首页 > 解决方案 > INNO 设置 - CMD .bat 问题(PrivilegesRequired=admin,在代码部分,直接在 cmd 中工作)

问题描述

我有一个特殊的问题,并且已经用尽了我能找到的关于这个问题的所有线程。

请参阅下面的更新

我正在尝试通过 Exec() 函数在 INNO 安装程序的代码部分中运行 bat 文件。bat 接受一个包含双引号的参数,然后启动一个 java 程序(传递参数)。通过 INNO Exec(),bat 无法启动 java 程序。但是,如果我打开 cmd 并自己运行命令,它会成功启动。

创新代码:

    [Setup]
AppName=blah
AppVersion=1.0
AppPublisher=blah
AppPublisherURL=www.blah.com
DefaultDirName={pf}\blah
DefaultGroupName=blah
AllowNoIcons=no
OutputBaseFilename=blah 
SolidCompression=yes
Compression=lzma
ArchitecturesInstallIn64BitMode=x64
ArchitecturesAllowed=x64
AlwaysRestart=no
PrivilegesRequired=admin 

[Dirs]
Name: "{app}";

[Files]
Source: "..\dummy3.txt";DestDir: "{app}"; Flags: ignoreversion 64bit deleteafterinstall; BeforeInstall: InstallExt();

[Code]
{ Install SPSS Extensions from SPEs }
procedure InstallExt();
var
  ResultCode: integer;
begin
  if not Exec('"C:\Program Files\IBM\SPSS\Statistics\25\installextbundles.bat"', '–download no –source "C:\Program Files\blah"', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then
  begin
    MsgBox('Could not install OLSPS Extensions: ' + IntToStr(ResultCode) ,mbError, mb_Ok);
  end;        
end;

我想 INNO 正在以某种方式更改传递给 bat / cmd 的参数。有任何想法吗?

~~~~~~~ 更新~~~~~~

正如下面评论中的建议(参考:调试从 Inno Setup 安装程序执行的非工作批处理文件或命令),我运行它以便 cmd 保持打开状态并注释掉 bat 文件中的 ECHO。

[Run] 
Filename: C:\Windows\SysWOW64\cmd.exe; Parameters: '/K "C:\Program files\IBM\SPSS\Statistics\25\installextbundlesdebug.bat" –download no –source "C:\Program files\blah"'

我还通过 CMD 使用 ECHO 手动运行它以比较两者。

"C:\Program files\IBM\SPSS\Statistics\25\installextbundlesdebug.bat" –download no –source "C:\Program files\blah"

结果:通过对 bat 文件进行细微调整,无论是通过手动 cmd 还是 exec(),我都得到了相同的输出,但通过 cmd 成功启动了外部 java 程序,但通过 INNO 失败。完全相同的回显输出。

标签: batch-filecmdinno-setup

解决方案


好的,所以它与 INNO exec() 破坏无关,因为我可以通过 cmd 手动运行 bat 文件并让它回显与通过 INNO exec() 回显完全相同的输出。因此,它必须以某种方式(尽管有管理员权限)与权限或 bat/java 本身有关。


推荐阅读