自分自身を更新する必要があるVB6アプリケーションがあります。この目的のために、PM は、アプリケーションから起動されるバッチ ファイルを使用することを推奨しています。バッチ ファイルはプロセスを強制終了し、ローカル サーバーから新しいバージョンをダウンロードし、古いファイルを上書きして、アプリケーションを再度起動します。
これに関する私の問題は、プロセスが強制終了され、使用されているすべてのリソースが解放された後にのみ、タスクキルが親に制御を返すかどうかわからないことです。特に、プロセスの .exe ファイルはどうなるのだろうと考えていました。taskkill が戻った後にロックが解除されるという保証はありますか? -もちろん、理論的には、他のプロセスによってロックされるべきではありません。これは、私たちが関心を持っている唯一のケースです。
4 に答える
プロセスが強制終了された場合、exe は更新のために解放されます。taskkill を使用する代わりに、sysinternals の pskill を使用できますが、taskkill は /IM パラメーターでうまく機能するはずです。
ただし、pskill も taskkill も、プロセスが停止するのを待たずに制御を返します。そのため、プロセスを監視して、プロセスが実行されていないことを確認する必要があります。
また、これは私の好みのソリューションです。クリック 1 回で vb6 アプリを展開できます。これにより、新しいリリースでアプリが自動的に更新されます。詳細はこちらの記事をご確認ください。
プロセスによって開かれたリソースに関しては、(SQL 接続など) 開いたままになる可能性がありますが、ほとんどの場合、正常に閉じられます。プロセスで taskkill をテストして何が起こるかを監視することによってのみ、確実に知ることができます。
それが役立つことを願っています。
アプリ自体に更新をチェックさせることで、これを行います。存在する場合、アプリはそれらを一時的な場所にダウンロードします。その後、(.js) スクリプトを開始し、アプリを終了します。このスクリプトは、プロセスが閉じる (スリープする) まで待機し、更新をコピーしてアプリを再起動します。
これにより、スクリプト内のロジックがはるかに少なくなり、より多くのツールを利用できる環境で作業を行うことができます。
VB プログラムが処理する /Shutdown のようなコマンド ライン パラメータを用意します。
MyApp.exe /シャットダウン
/Shutdown パラメーターは、(FindWindow API を使用して) アプリの既存の実行中のインスタンスを見つけ、スムーズにシャットダウンするように要求するユーザー メッセージをウィンドウに送信します。
Taskkill は、プロセスが終了した後にのみ戻る必要があります (以下のコメントに従って: ユーザー入力が必要な場合は、/F フラグを使用してプログラムを強制的に終了させます)。
詳細については、プロセス エクスプローラーを使用して、プロセスがいつ終了したかを正確に確認したり、.exe ファイルを開いているユーザーがいるかどうか (Ctrl+F と exe の名前) を確認したりできますが、そうではありません。