2010-11-25 11 views
12

現在実行中のプロセスA.exeから新しいプロセスB.exeを開始します。新しいプロセスを開始し、現在のプロセスを終了する

そしてB.exeが起動するとすぐに、私はA.exe(現在の実行中のプロセス)を殺したいと思っています。

B.exeを起動することはできますが、現在のプロセス、つまりA.exeを閉じることはできません。私が使用

コードは次のとおりです。

//Start the BT Setup Process 
ProcessStartInfo startInfo = new ProcessStartInfo(@"C:\TEST\B.exe"); 
Process.Start(startInfo); 

//Terminate the FSA 
Process[] myProcess = Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName); 
foreach (Process process in myProcess) 
{ 
    process.CloseMainWindow(); 
    //all the windows messages has to be processed in the msg queue 
    //hence call to Application DoEvents forces the MSG 
    Application.DoEvents(); 
} 
+0

ところで、私はProcess.Kill()メソッドを使いたくありません。 – srivatsa

+1

なぜProcess.Kill()メソッドを使いたくないのですか? – abatishchev

+0

それは私のクリーンアップコードを呼び出すことはありません – srivatsa

答えて

3

は、なぜあなたはそれ自体で閉じA猫がBを開始しながら、BからAを閉じるようにしたいとしますか?

Process.Start("A.exe"); 
Process.GetCurrentProcess().Kill(); // or Application.Exit(); or anything else 
2

あなただけのあなただけのむしろをループしてプロセスを閉じるよりもApplication.Exitを呼び出すことができる必要があり、現在のプロセスを終了する場合。

+0

Application.Exitを使用すると、私のA.exeアプリケーションがハングアップします。それが私がProcess.CloseMainWindow()を使用する理由です。 – srivatsa

+3

@srivatsa:あなたのプロセスで 'Application.Exit'を呼び出すとハングアップする場合は、なぜそれを調べようとする価値があるかもしれないと言えます。上記の質問も。 –

3

Process.CloseMainWindow()の代わりにProcess.Kill()を試してください。私は、コンソールアプリケーションを起動した後、近くにフォームメソッドを使用してのWinFormsアプリケーションでテストどんな

+1

私はクリーンアップコードを呼び出さないので、Process.Kill()を使用したくありません。 – srivatsa

1

私はこれが古いです知っているが、.NET 4.0で、あなたが

ProcessStartInfo startInfo = new ProcessStartInfo(@"C:\TEST\B.exe"); 
startInfo.UseShellExecute = true;//This should not block your program 
Process.Start(startInfo); 

を行うことができます次にApplication.Exitまたはそのわずか数ブロックConsole.readline();

2

プロセスを開始するこのクエストに陥っていて、その後独自のプロセスを終了する場合は、Application.Exit()ではなくEnvironment.Exit(0)を使用してください。

+1

アクティブなフォアグラウンドスレッドがある場合、アプリケーションは終了しません。 Process.GetCurrentProcess()。Kill();より決定論的に思えます。 –

+0

これは非常に重要です...スレッドを殺したくない時があるからです...そうですか?そして時にはあなたはそうです! –

関連する問題