在Inno设置中,我使用以下代码执行另一个设置文件:
[Run]
Filename: "{app}MySetup2.exe"; WorkingDir: "{app}"; Flags: waituntilterminated
此安装文件执行另一个安装文件并自行关闭。但是Inno Setup不等待第二次设置;完成";对话如何暂停安装,直到第二个安装程序关闭?
Inno Setup Exec((函数Wait for a limited time显示如何等待进程。但是如何在安装过程中应用它呢?
我找到了这个问题的解决方案。您需要使用VBScript来运行第一个安装程序,并使其同时等待第一个子安装程序和第二个子安装程序。它运行第一个安装程序并等待它关闭。关闭后,VBScript转到下一个代码,该代码检查第二个子安装程序的进程名称并等待,直到关闭为止。您可以在Inno设置中运行此VBScript。这是您需要保存的VBScript代码,文件扩展名为.vbs,
on error resume Next
Set objArgs = Wscript.Arguments
dim strArg0
strArg0 = objArgs(0)
strArg1 = objArgs(1)
Dim FSO, CurrentFolder
Set FSO = CreateObject("Scripting.FileSystemObject")
CurrentFolder = FSO.GetAbsolutePathName(".")
const DontWaitUntilFinished = false, ShowWindow = 1, DontShowWindow = 0, WaitUntilFinished = true
set oShell = WScript.CreateObject("WScript.Shell")
command = strArg0
oShell.Run command, ShowWindow, WaitUntilFinished
'''''''''''''''''''''''''''''''
if strArg1 <> "" then
strProcess = strArg1
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\.rootcimv2")
Set colProcesses = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = '"& strProcess &"'")
Do While colProcesses.Count > 0
Set colProcesses = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = '"& strProcess &"'")
Wscript.Sleep(1000) 'Sleep 1 second
Loop
end if
这是您放入Run部分的Inno Setup代码(假设您将VBScript文件保存为MyVBS1.vbs(,
[Run]
Filename: "wscript.exe"; Parameters: """{app}MyVBS1.vbs"" ""{app}MySetup2.exe"" ""MySubSetup.exe"""; Flags: waituntilterminated
wscript.exe
运行Windows脚本主机
{app}\MyVBS1.vbs
VBScript文件的文件位置
{app}\MySetup2.exe
第一个安装程序的文件位置
MySubSetup.exe
第二个安装程序的进程名称。