2009-04-03 7 views

答えて

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() 
{ 
    // ... 
} 
+0

コードにバグがあります。 "program.exe"という名前の2つのプロセスが実行されている場合は、更新されるプロセスが終了し、その後間違ったプロセスを待っています。私はプロセス名に基づいて待つことを避けるだろう。 2つのプロセス間の何らかの通信がおそらくより良いでしょう。 –

+0

おそらく短い遅延と組み合わせた名前付きセマフォ。または、実行可能ファイルを書き込み用に開くことができるかどうかを繰り返し確認してください。 –

+0

例外部分が欠場しましたか?もちろん、より堅牢なコードが必要ですが、これは概念です。 – Samuel

-2

はあなたシャットダウン前にアプリケーションを更新する実行可能ファイルを実行します。

0

もう少し小さな更新アプリケーションが必要ですね。 Process.Start()で開始し、このヘルパー・プロセスを実行可能ファイルに置き換え、Process.Start()で新しいヘルパー・プロセスを再度起動します。

3

逆に行います。古いアプリケーションを使用して更新されたファイル全体を取得し(一時的に保存する)、プロセスの開始を使用してアップデータアプリケーションを起動します。すべての更新は、古いファイルに新しいファイルをコピーし、アプリケーションを再起動するだけです。

アップデーターはアクセス拒否例外をキャッチして、アプリケーションがコピーされるのを待つことができます。コピーが完了すると、新しい一時ファイルが削除され、シャットダウンする前にアプリケーションが再起動されます。

その後、必要に応じて(通常のアプリケーションを使用して)アップデータを更新することができます。

関連する問題