2016-03-26 17 views
3

基本的には、.batファイルを起動して閉じることができるプログラムを作成しようとしています。私はbatファイルを起動することができましたが、.batファイルを閉じる方法を知ることはできません。ここでC#プロセスを終了できません

は、クラスのコードです:

using System; 
using System.Diagnostics; 
using System.Threading; 
using System.ComponentModel; 

namespace Launcher 
{ 
    class MyProcess 
    { 
     public static void LaunchProcess() 
     { 
      Process myProcess = new Process(); 
      try 
      { 
       myProcess.StartInfo.UseShellExecute = false; 
       myProcess.StartInfo.FileName = "C:\example.bat"; 
       myProcess.StartInfo.CreateNoWindow = true; 
       myProcess.Start(); 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine(e.Message); 
      } 
     } 
    } 
} 

私は再していたかのように私は、私は、コードに追加するかどうかはわからないよしかしmyProcess.Kill();を使用しなければならないプロセスを強制終了することを承知しています「launchprocess」と呼ぶ、その後myProcessは、バッチファイルに

+0

「C:\ example.bat」を「C:\\ example.bat」に変更する必要があります。 – Ian

+0

.batファイルを実行するためにCmd.exeが起動します。だから、自分でcmd.exeを起動し、それをkillすることができます。引数として "/ c example.bat"を使います。これは、.batファイルによって開始されたすべてのプロセスを強制終了させることを確実にするだけでは十分ではありません。確実に行うのが難しい場合は、ジョブオブジェクトを使用するか、taskkill/tオプションを使用する必要があります。 –

答えて

0

を上書きされます。あなたは、静的メソッドとしてこれを保持したい場合は、結果としてProcessを返す:

public static class MyProcess 
{ 
    public static void LaunchProcess() 
    { 
     Process myProcess = new Process(); 
     try 
     { 
      myProcess.StartInfo.UseShellExecute = false; 
      myProcess.StartInfo.FileName = "C:\example.bat"; 
      myProcess.StartInfo.CreateNoWindow = true; 
      myProcess.Start(); 
      return myProcess; 
     } 
     catch (Exception e) 
     { 
      myProcess.Dispose(); 
      Console.WriteLine(e.Message); 
     } 
    } 
} 

は今、あなたは、新しいプロセスを表しProcessオブジェクトを持っていて、取り除くために必要がある場合は、それにKillメソッドを呼び出すことができますそれの。

代わりに、これを非静的に変更し、要求されたときにクラスインスタンスでプロセスを終了させることができます。あなたがそれをやっていることに応じて感覚がIDisposableを実装することになるかもしれない:プロセスは、独自のプログラムよりも長生きしないことを保証しなければならない

public class MyProcess : IDisposable 
{ 
    private Process myProcess = null; 

    ~MyProcess() 
    { 
     Dispose(false); 
    } 

    public void Dispose(bool dispose) 
    { 
     Dispose(); 
    } 

    public void Dispose() 
    { 
     if (myProcess != null) 
     { 
      if (!myProcess.HasExited) 
       myProcess.Kill(); 
      myProcess.Dispose(); 
      myProcess = null; 
     } 
    } 

    public bool LaunchProcess() 
    { 
     try 
     { 
      myProcess = new Process(); 
      myProcess.StartInfo.UseShellExecute = false; 
      myProcess.StartInfo.FileName = "C:\example.bat"; 
      myProcess.StartInfo.CreateNoWindow = true; 
      myProcess.Start(); 
      return true; 
     } 
     catch (Exception e) 
     { 
      myProcess.Dispose(); 
      Console.WriteLine(e.Message); 
     } 
     return false; 
    } 
} 

を。

+0

質問はバッチファイルを外部で終了する方法、バッチファイル自体を終了させる方法ではないようです。 – Corey

+0

バッチファイルでExitを使用すると、バッチファイルが途中で終了することがなくなります。それ以外のプロセス.Killは最も可能性が高い方法です – Eminem

1

"Exit"コマンドの追加についてあなたのコードは、プロセス情報を格納するローカル変数を使用して、後の操作のためにそれを保存しない方法

関連する問題