暂停 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
第二个安装程序的进程名称。
在 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
第二个安装程序的进程名称。