web-dev-qa-db-ja.com

スクリプトから.msiをインストールし、インストールの完了を検出します

インストールスクリプトを作成しようとしています。 .msiファイル、Pythonをインストールし、Pythonがインストールされた後、他のものをインストールします。コマンドラインインストールの方法を既に確認しています ただし、msiexecは、インストールがまだ実行されている場合でも、すぐに戻ります。バッチスクリプトからmsiインストールの完了を検出するにはどうすればよいですか?

7
Claudiu

PythonがWindows/DOSにコマンドを渡す処理をどのように処理するかはわかりませんが、プレーンなバッチファイルとstart /waitコマンドバッチファイルは停止し、MSIが完了するまで待機してから、次のステップに進みます。

たとえば、メインアプリをインストールし、それが終了したときにのみパッチを適用し、それが終了したら最終的なプログラムをインストールするには、次の行を.cmdファイルにドロップします。

start /wait msiexec /i O12Conv.msi /qb
start /wait msiexec /p O12Convsp1-en-us.msp /qb
start /wait msiexec /i mpsetupedp.msi
9
GAThrawn

これはトリッキーで信頼性がありませんが、プロセスリスト内の特定のプロセスの存在を監視する方法があります。そのプロセスが存在しなくなるのを待っている間にループをNOOPに書き込んでから、次のステップを実行します。これを処理する方法はいくつかあります。

SysInternalsツールpslistはプロセスを表示しますが、出力の解析は難しい場合があります。 PowerShellは.NET APIにアクセスして、get-processコマンドレット。

これらのメソッドは、プロセスの存在を監視するだけであり、終了コードを確認できないため、プロセスが正常に終了したかエラー状態で終了したかどうかを確認できません。そのためには、生成した指定のMSIログを処理するか、場合によってはエラーイベントのWindowsイベントログを掘る必要があります。

0
sysadmin1138