私のアプリケーションのアップデートシステムを書いていますが、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. Eclipseで実行する前にJavaアプリケーションを閉じる
- 4. Railsアプリケーションでアクションを実行する閉じる
- 5. 閉じるアプリケーション
- 6. PHPを使用して外部サーバでアプリケーションを実行する
- 7. Silverlightアプリケーションを閉じて親アプリケーションにリダイレクト
- 8. アプリケーションがデバッグモードで例外で閉じる
- 9. Javaアプリケーションから実行中のプログラムを閉じる
- 10. タイマーとアプリケーションを閉じる
- 11. Robotiumで外部アプリケーションを閉じることはできますか?
- 12. Javaから外部アプリケーションを実行するか、BATファイルを実行する
- 13. デバッグエリアがアプリケーション実行中にXcodeで閉じる
- 14. java、アプリケーションを閉じる前に実行するメソッドを宣言する
- 15. 1つのUIButtonタッチで実行中のアプリケーションをすべて閉じますか?
- 16. iPhoneアプリケーションでキーボードを閉じるキーを閉じる(UITextViewで)
- 17. Domino 6.5 - フレームセット内のドキュメントを閉じる - アプリケーションを閉じる
- 18. MessageBoxResultボタン閉じるアプリケーションをキャンセルする
- 19. は、アプリケーションが「閉じる」
- 20. Rubyで閉じるアプリケーション
- 21. VS11アプリケーションの閉じるボタン
- 22. javascript外部URLのウィンドウを閉じる
- 23. ベストプラクティスはJava Webアプリケーションで外部プログラムを実行します
- 24. アンインストール前にWiXアプリケーションを閉じる - 開いているアプリケーションメッセージを閉じる
- 25. AndroidアプリケーションのLibgdx app.exit()がアプリケーションを閉じていない
- 26. 常にASP.NETと外部Webホスティング内でアプリケーションを実行
- 27. アプリケーションのウィンドウを閉じる(OSX)
- 28. アプリケーションをプログラムで中断/閉じる
- 29. iosでアプリケーションを閉じるには?
- 30. Android、アプリケーションを閉じるには:android.os.Process.killProcess(android.os.Process.myPid());
コードにバグがあります。 "program.exe"という名前の2つのプロセスが実行されている場合は、更新されるプロセスが終了し、その後間違ったプロセスを待っています。私はプロセス名に基づいて待つことを避けるだろう。 2つのプロセス間の何らかの通信がおそらくより良いでしょう。 –
おそらく短い遅延と組み合わせた名前付きセマフォ。または、実行可能ファイルを書き込み用に開くことができるかどうかを繰り返し確認してください。 –
例外部分が欠場しましたか?もちろん、より堅牢なコードが必要ですが、これは概念です。 – Samuel