1

我已经构建了一个 Inno Setup 安装程序,但我的最后一步遇到了一些问题。

最初我想在完成后运行一个批处理文件(来自该[Run]部分)。此批处理文件启动yajsw服务,并使用java.exe.

我遇到了批处理文件无法识别的问题java.exe,即使我将它添加到本地路径或直接在system32. 我认为这可能与 Java 不在sysWOW6464 位机器上有关。

无论如何,一些要求发生了变化,我最终只是explorer.exe在适当的文件夹(有几个批处理文件)中打开了一个实例,并给出了使用哪一个的说明。我在CurStepChanged()when curStepisssDone中使用Exec()(或ShellExec)来执行此操作。似乎即使在此资源管理器窗口中双击这些批处理文件也存在无法识别的相同问题java.exe,但如果我手动打开资源管理器窗口,它就可以正常工作。

我不确定这是否重要,但我正在使用它的测试机器正在运行 Windows Server 2008。我尝试过使用PrivilegesRequired=admin,我尝试过调用ShellExec()以及Exec()我尝试过EnableFsRedirection(False)

任何想法都会有所帮助,谢谢!

编辑:由于我不再直接调用批处理文件,而只是尝试打开包含文件夹:

[Setup]  
AppId={{264F5847-C34C-4DB1-9EBF-F4D730D7E846}  
AppName={#MyAppName}  
AppVersion={#MyAppVersion}  
AppPublisher={#MyAppPublisher}  
AppPublisherURL={#MyAppURL}  
AppSupportURL={#MyAppURL}  
AppUpdatesURL={#MyAppURL}  
DefaultDirName=C:\TestInstall  
DisableDirPage=yes  
DefaultGroupName=foo  
DisableProgramGroupPage=yes  
OutputDir=C:\Project\installer  
OutputBaseFilename=setup  
Compression=lzma  
SolidCompression=yes  
UninstallFilesDir={code:InstallPath}  
SetupIconFile=foo.ico  
UninstallIconFile=foo.ico  
SetupLogging=yes  

...snip...  
[Code]  
...snip...  
procedure CurStepChanged(CurStep: TSetupStep);  
var  
  ResultCode: Integer;  
  cmd : String;  
begin  
  if CurStep = ssDone then  
  begin  
    cmd := 'explorer.exe';  
    ShellExec('', cmd, InstallPath('') + '\server', '', SW_SHOW, ewNoWait, ResultCode);  
  end;  
end;  

并且Installpath\server\目录中的批处理文件只是(基本上......有几个批处理文件都使用java):

java.exe {various params}

基本上,即使我只有java.exe,无论是完全路径还是在本地添加路径,它在 Inno 触发的资源管理器窗口中都不起作用,但如果您手动打开另一个窗口,它确实有效。

谢谢!

4

1 回答 1

1

您正在使用错误的权限运行资源管理器。改为使用ShellExecAsOriginalUser,或(更好)使用带有和合适的[Run]条目。Flags: postinstall shellexecDescription

(另外,如果您想尝试返回运行 java,那么您可以尝试使用useapppaths标志,或查询注册表以找到 Java 的正确路径。)

于 2012-12-08T08:38:51.263 回答