私のアプリケーションのアップデートシステムを書いていますが、exeファイルを上書きするためにアプリケーションをシャットダウンする必要がありますが、シャットダウン後にアップデート実行ファイルを実行する必要があります。アプリケーションを閉じて外部アプリケーションを実行する
2
A
答えて
2
Process.Start
を使用してアップデータを起動し、メインプログラムが終了するまで待つことができますか?私はそれが最も簡単な解決策だと思う。
また、メインアプリケーションを起動する前に、アップデートとアップデートをチェックする別のランチャープログラムを用意することもできます。しかしこれは、ランチャーを更新する必要がある場合、同じ問題につながります。この線に沿って
:
static void Main(string[] args)
{
var haveToUpdate = ...;
if (haveToUpdate)
{
Process.Start("update.exe");
Environment.Exit(0);
}
}
static void Main(string[] args)
{
var processes = Process.GetProcessesByName("program.exe");
if (processes.Length > 1)
throw new Exception("More than one program.exe running");
else if (processes.Length == 0)
Update();
else
processes[0].Exited += new EventHandler(Program_Exited);
}
static void Program_Exited(object sender, EventArgs e)
{
Update();
}
static void Update()
{
// ...
}
-2
はあなたシャットダウン前にアプリケーションを更新する実行可能ファイルを実行します。
0
もう少し小さな更新アプリケーションが必要ですね。 Process.Start()で開始し、このヘルパー・プロセスを実行可能ファイルに置き換え、Process.Start()で新しいヘルパー・プロセスを再度起動します。
3
逆に行います。古いアプリケーションを使用して更新されたファイル全体を取得し(一時的に保存する)、プロセスの開始を使用してアップデータアプリケーションを起動します。すべての更新は、古いファイルに新しいファイルをコピーし、アプリケーションを再起動するだけです。
アップデーターはアクセス拒否例外をキャッチして、アプリケーションがコピーされるのを待つことができます。コピーが完了すると、新しい一時ファイルが削除され、シャットダウンする前にアプリケーションが再起動されます。
その後、必要に応じて(通常のアプリケーションを使用して)アップデータを更新することができます。
関連する問題
- 1. cを使用して外部アプリケーションを閉じる方法
- 2. アプリケーション実行時にコードを実行閉じる
- 3. 外部のアプリケーションからのポップアップウィンドウをスクリプトで閉じますか?
- 4. アプリケーションを閉じるメッセージを閉じる
- 5. 既に実行中のアプリケーションを閉じるアプリケーションを起動する
- 6. 閉じるアプリケーション
- 7. Silverlightアプリケーションを閉じて親アプリケーションにリダイレクト
- 8. VBAを通じてアプリケーションを閉じる
- 9. Railsアプリケーションでアクションを実行する閉じる
- 10. Eclipseで実行する前にJavaアプリケーションを閉じる
- 11. PHPを使用して外部サーバでアプリケーションを実行する
- 12. アプリケーションがデバッグモードで例外で閉じる
- 13. 外部アプリケーションを実行して終了する
- 14. wxpython:閉じるアプリケーションが進行状況バーを閉じない
- 15. Javaアプリケーションから実行中のプログラムを閉じる
- 16. HOWTO:ウィンドウコマンドプロンプトを閉じるアプリケーション
- 17. タイマーとアプリケーションを閉じる
- 18. Robotiumで外部アプリケーションを閉じることはできますか?
- 19. Javaから外部アプリケーションを実行するか、BATファイルを実行する
- 20. 外部コマンドとしてtcpdumpを実行する:外部コマンドを正しく閉じるには?
- 21. ボタンをクリックして閉じるアプリケーション
- 22. IO内部アプリケーションを実行
- 23. 外部サーバーなしでAppleTVアプリケーションを実行する
- 24. C++で外部アプリケーションを実行するコールバック
- 25. Sinatraアプリケーションから外部Rubyスクリプトを実行する方法
- 26. デバッグエリアがアプリケーション実行中にXcodeで閉じる
- 27. Regd:Androidアプリケーションを使用してプログラマチックにアプリケーションを閉じる
- 28. java、アプリケーションを閉じる前に実行するメソッドを宣言する
- 29. 閉じるすべてのアクティブなアプリケーション
- 30. PyQTを閉じてアプリケーションを開く
コードにバグがあります。 "program.exe"という名前の2つのプロセスが実行されている場合は、更新されるプロセスが終了し、その後間違ったプロセスを待っています。私はプロセス名に基づいて待つことを避けるだろう。 2つのプロセス間の何らかの通信がおそらくより良いでしょう。 –
おそらく短い遅延と組み合わせた名前付きセマフォ。または、実行可能ファイルを書き込み用に開くことができるかどうかを繰り返し確認してください。 –
例外部分が欠場しましたか?もちろん、より堅牢なコードが必要ですが、これは概念です。 – Samuel