プログラムを終了し、終了するプログラムから追加のコードを実行する最良の方法は何ですか? たとえば、プログラムが自分自身を自己更新するための最良の方法は何でしょうか?
7 に答える
いくつかのオプションがあります。
別のアプリケーション .exe を使用して自動更新を実行できます。これはおそらく最良の方法です。
プログラムの実行中にプログラムの exe の名前を変更することもできます。したがって、更新サーバーからファイルを取得して置き換えることができます。プログラムの次回の起動時に、新しい .exe が使用されます。その後、起動時に名前を変更したファイルを削除できます。
ここで話している言語を知っておくと非常に役立ちます。PowerBuilderまたはCobolでこれを行うためのいくつかの本当に素晴らしいヒントを提供できると確信していますが、それはあなたが求めているものではないかもしれません。ただし、Javaについて話している場合は、シャットダウンフックを使用できます。これは私にとってはうまく機能します。
もう1つ考慮すべき点は、私が使用している「主要な」アプリのほとんど(FileZilla、Paint.NETなど)は、アップデーターに以前のバージョンのアプリをアンインストールしてから、新しいバージョンのフレッシュインストールを実行させていることです。アプリケーションの。
これは実際には大規模なアプリケーションでは機能しないことを理解していますが、これは中小規模のアプリケーションでは「推奨される」プロセスのようです。
.NETアプリケーションの作成を使用している場合は、ClickOnceの使用を検討してください。かなりのカスタマイズが必要な場合は、他の場所を探すとよいでしょう。
更新を実行する外部プロセスがあります。更新が見つかると、それをセカンダリフォルダーにダウンロードし、メインアプリケーションが終了するのを待ちます。終了時に、現在のすべてのファイルを置き換えます。プライマリプロセスは、4時間ごとに更新プロセスを開始するだけです。更新プロセスはプライマリアプリの終了を待機するため、プライマリアプリは更新アプリケーションを開始する以外に特別な処理を行う必要はありません。
これは副次的な問題ですが、独自の更新プロセスを作成することを検討している場合は、(1)ダウンロードを節約し、(2)更新サーバーからプルする1つのファイルを提供するために何らかの圧縮を使用することを検討することをお勧めします。
それが理にかなっていることを願っています!
以前のアプリでこのようなことをしました。X または [閉じる] ボタンのいずれかから (.NET 2.0 で) プログラムの終了をキャプチャし、ユーザーには表示されないバックグラウンド更新プロセスを開始しました。サーバー (クライアント サーバー アプリ) で更新プログラムをチェックし、利用可能な更新プログラムがある場合は、BITS を使用してバックグラウンドでダウンロードします。次にアプリケーションが開いたときに、新しいバージョンがあることを認識し (フラグを設定)、ユーザーに新しいバージョンを警告するメッセージと、追加された新機能を表示する場合にクリックするボタンを表示します。このバージョンに。
更新を行うために実行されるセカンダリ アプリがあれば、より簡単になります。「アップデータ」アプリを実行し、その中で他のプロセスが終了するのを待ちます。通常のアプリ DLL などにアクセスする必要があるが、更新も必要な場合は、更新済みの DLL を使用して 2 番目の場所からアップデーターを実行して、元の場所で使用されないようにすることができます。
シャットダウンする前にプライマリ プログラムが起動する 2 番目のプログラムなしでそれを行う方法がわかりません。プログラム 2 は、変更をダウンロードしてインストールし、プライマリ プログラムを再起動します。