Inno setup ';功能不正确';调用java时从exec返回

Inno setup ';功能不正确';调用java时从exec返回,inno-setup,Inno Setup,我正在调用cmd来执行java,但是resultcode始终是1,检查后,我发现它代表“不正确的函数”。 我的代码如下: Exec('cmd', '/c C:\Program Files\jre\bin\java -version','' , SW_HIDE, ewWaitUntilTerminated, ResultCode); 我还调用了以下代码,它也不起作用: Exec('cmd', '/c "C:\Program Files\jre\bin\java -version"',''

我正在调用
cmd来执行java
,但是
resultcode
始终是1,检查后,我发现它代表“不正确的函数”。 我的代码如下:

Exec('cmd', '/c C:\Program Files\jre\bin\java -version','' , SW_HIDE,   ewWaitUntilTerminated, ResultCode);
我还调用了以下代码,它也不起作用:

 Exec('cmd', '/c "C:\Program Files\jre\bin\java -version"','' , SW_HIDE,  ewWaitUntilTerminated, ResultCode);
如果我调用下面的代码,它就会工作

 Exec('cmd', '/c java -version','' , SW_HIDE, ewWaitUntilTerminated, ResultCode);

似乎无法识别java路径`中的空格。有人知道如何更正吗?

您的第一次尝试失败,因为文件路径中有一个空格,没有用双引号括起来。第二次尝试失败,因为除了文件路径外,您还将传递的参数
-version
括在了双引号中。而且,在这两种情况下,应用程序路径的末尾都缺少
.exe

您可以通过以下方式进行尝试:

Exec('cmd', '/c ""C:\Program Files\jre\bin\java.exe" -version"', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
但是,我在这里缺少通过
cmd
shell执行它的原因。我想您可以通过以下方式直接调用
java.exe

Exec('C:\Program Files\jre\bin\java.exe', '-version', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);

请注意,您确定
java.exe
将始终位于
C:\Program Files\jre\bin\
中吗?

需要双引号。请参考,谢谢!请注意,
cmd/c
对于初始引号来说很奇怪。除了引用文件名,还必须引用整个命令行;ie:
“/c”“c:\Program Files\…\java.exe”-version“
。(当然,您也应该查找java的路径,而不是硬编码。)您好,我还发现问题的原因是,正如Miral所建议的,还需要一对双引号。我查看特定文件夹,因为它在已安装的应用程序下,我们将jre放入其中。我会修复它@米拉尔,谢谢你的提示!user1954461,仍然使用第二种方式,而不使用
cmd
shell。无论如何,若这篇文章解决了你们的问题,你们可能会问。首先,我只是用Exec调用java应用程序。稍后,我们需要重定向执行的输出,因此我使用cmd调用java并添加“>”将输出重定向到文件。我知道了,除了修改代码,还有其他方法添加日志吗。对于您的问题,您所说的添加日志而不是修改代码的其他方式是什么意思?您是指读取控制台输出的另一种方式吗?