0

アンインストール文字列 (つまり、setup.exe -remove) を使用して、pkg_1 などのパッケージをアンインストールするスクリプトがあります。その後、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)

ここで私の問題は、上記の 2 つのステートメントの間に WScript.sleep(120000) を配置すると、両方のパッケージが正常に削除されることです。それ以外の場合、pkg_1 のアンインストールは停止され、pkg_2 のアンインストールがすぐに開始されます。その結果、pkg_2 のみが削除されます (スリープなし)。

sleep メソッドを使用せずに 2 つのパッケージをアンインストールするにはどうすればよいですか?

参考までに、コマンド プロンプトから uninstall_string_1 を実行すると、0 ~ 5 秒後に新しいプロンプトが開き、バックグラウンドでアンインストールが進行します。

4

2 に答える 2

0

これを試してください:

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

Arjun、私は別のフォーラムでこれを読みました:

スクリプトを使用してパッケージをインストールまたはアンインストールする場合、パッケージの実装に大きく依存します。setup.exe 自体がプロセス A として実行されているとします。プロセス A は名目上の検証を行ってから、実際のインストール エンジンであるプロセス B を生成し、終了します。この場合、(コードで true に設定した) bWaitOnReturn はその作業を完了し、制御は次のステートメントに渡されます。ただし、プロセス B はまだ実行中です。これは、bWaitOnReturn の制御外です。したがって、最初のパッケージが実際に完了する前に、2 番目のパッケージが開始されます。最初のパッケージは実際には停止していない可能性があります。時間がかかり、バックグラウンドで実行されている可能性があります。とにかくそれはただの推測です。

そうでない場合は、これも試してみてください:

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 に答える