暂停 Inno Setup 安装?

Pause Inno Setup installation?

在 Inno Setup 中,我使用以下代码执行另一个安装文件:

[Run]
Filename: "{app}\MySetup2.exe"; WorkingDir: "{app}"; Flags: waituntilterminated

此安装文件执行另一个安装文件并自行关闭。但是 Inno Setup 不会等待第二次设置并转到“完成”对话框。如何暂停安装直到第二个安装程序关闭?

Inno Setup Exec() function Wait for a limited time 显示如何等待进程。但是如何在安装过程中应用它呢?

我找到了这个问题的解决方案。您需要使用 VBScript 运行 第一个安装程序并使其等待第一个和第二个子安装程序。它 运行 是第一个安装程序,等待它关闭。关闭后,VBScript 转到下一个代码,检查第二个子安装程序的进程名称并等待它关闭。您 运行 Inno Setup 中的这个 VBScript。这是您需要使用文件扩展名 .vbs,

保存的 VBScript 代码
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}!\.\root\cimv2")
    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

这是您放入 运行 部分的 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

第二个安装程序的进程名称。