我已经构建了一个 Inno Setup 安装程序,但我的最后一步遇到了一些问题。
最初我想在完成后运行一个批处理文件(来自该[Run]
部分)。此批处理文件启动yajsw
服务,并使用java.exe
.
我遇到了批处理文件无法识别的问题java.exe
,即使我将它添加到本地路径或直接在system32
. 我认为这可能与 Java 不在sysWOW64
64 位机器上有关。
无论如何,一些要求发生了变化,我最终只是explorer.exe
在适当的文件夹(有几个批处理文件)中打开了一个实例,并给出了使用哪一个的说明。我在CurStepChanged()
when curStep
isssDone
中使用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 触发的资源管理器窗口中都不起作用,但如果您手动打开另一个窗口,它确实有效。
谢谢!