0

我有脚本来卸载一个包说 pkg_1 使用它的卸载字符串(即 setup.exe -remove)。之后,它试图删除另一个包,比如 pkg_2。pkg_1 的卸载大约需要 1 到 2 分钟。脚本如下所示

rc = shellobj.Run("cmd /C " & uninstall_string_1 & " /silent",0, true)
rc1 = shellobj.Run("cmd /C " & uninstall_string_2 & " /silent",0, true)

我的问题是,如果将 WScript.sleep(120000) 放在上述两个语句之间,则两个包都将成功删除。否则,将停止 pkg_1 的卸载并立即开始卸载 pkg_2。结果只有 pkg​​_2 被删除(没有睡眠)。

如何在不使用 sleep 方法的情况下卸载两个包?

仅供参考如果您从命令提示符运行uninstall_string_1,新的提示将在0-5 秒后打开,并且卸载在后台进行

4

2 回答 2

0

Arjun,我在另一个论坛上读到了这个:

当我们使用脚本安装或卸载包时,很大程度上取决于包的实现。假设 setup.exe 本身作为进程 A 运行。进程 A 进行一些名义上的验证,然后生成进程 B,即真正的安装引擎,然后自行关闭。在这种情况下,bWaitOnReturn(您已在代码中设置为 true)已完成其工作,控件将交给下一条语句。但是,进程 B 仍在运行。这是 bWaitOnReturn 无法控制的。因此,您的第二个包裹将在您的第一个包裹实际完成之前开始。也许你的第一个包实际上并没有停止,它可能需要时间并在后台执行。反正这只是一个猜测。

如果不是这种情况,你也可以试试这个:

Set obj0 = CreateObject("WScript.Shell")
Set objExec = obj0.Exec("your package../../")
'  We will set a loop until finished
Do While objExec.Status <> 1
WScript.Sleep 100
Loop

因此,每 100 毫秒,脚本将检查您的包是否已完成执行。如果有,它将移至下一条语句。

于 2013-04-10T07:31:44.510 回答
0

试试这个:

strCmd = uninstall_string_1 & " & " & uninstall_string_2
rc = shellObj.Run("cmd /C " & strCmd, 0, True)
于 2013-04-10T17:04:56.370 回答