3

C#で3つのプログラムを開こうとしていますが、エラーが発生した場合でもコードを続行したいと思います。つまり、プログラム2と3は、プログラム1で何かが失敗した場合でも、開こうとする必要があります。また、プログラムがいくつかのスイッチを取り、何かが失敗する可能性があるため、ファイルの存在を確認したくありません。
プログラム1が失敗すると、以下のコードが爆破されます。エラーを無視してコードを続行するにはどうすればよいですか?

try
{
        string path = Environment.GetFolderPath(Environment.SpecialFolder.Startup);
        //Program 1
        Process x = Process.Start("\"C:\\Program Files\\Company\\Office\\MyProgram1.EXE\"   /runtime  \"C:\\Program Files\\Company\\Config.xml\" /cmd RunServer");
        //Program 2
        Process x = Process.Start("\"C:\\Program Files\\Company\\Office\\MyProgram2.EXE\"   /runtime  \"C:\\Program Files\\Company\\Config.xml\" /cmd RunServer");
        //Program 3
        Process x = Process.Start("\"C:\\Program Files\\Company\\Office\\MyProgram3.EXE\"   /runtime  \"C:\\Program Files\\Company\\Config.xml\" /cmd RunServer");
}
catch {}
4

3 に答える 3

8

Try...Catchプロセスごとに個別にするのが、おそらくそれを行うための最良の方法です。ただし、プログラムをいくつでも持つことができる場合は、呼び出しごとforeachにを手動で書き込む代わりに、ループを使用できます。Try...Catch

List<Action> processesToCall = new List<Action>();  

string path = Environment.GetFolderPath(Environment.SpecialFolder.Startup);
processesToCall.Add(() => Process.Start("\"C:\\Program Files\\Company\\Office\\MyProgram1.EXE\"   /runtime  \"C:\\Program Files\\Company\\Config.xml\" /cmd RunServer"));
processesToCall.Add(() => Process.Start("\"C:\\Program Files\\Company\\Office\\MyProgram2.EXE\"   /runtime  \"C:\\Program Files\\Company\\Config.xml\" /cmd RunServer") );
processesToCall.Add(() => Process.Start("\"C:\\Program Files\\Company\\Office\\MyProgram3.EXE\"   /runtime  \"C:\\Program Files\\Company\\Config.xml\" /cmd RunServer") );    

foreach(Action a in processesToCall)
{
    try
    {
       a();
    }
    catch
    {
       //log  (or whatever you want to do with it)
    }
}

このように、アクションごとにブロックを作成する必要がないTry...Catchため、アクションを追加する方が簡単です。

于 2013-03-23T15:21:46.330 に答える
3

3つの異なるtry-catchブロックを使用する

string path = Environment.GetFolderPath(Environment.SpecialFolder.Startup);
try {        
    //Program 1
    Process x = Process.Start(path + "/runtime  \"C:\\Program Files\\Company\\Config.xml\" /cmd RunServer");
}
catch {}
try {
    //Program 2
    Process x = Process.Start(path + " /runtime  \"C:\\Program Files\\Company\\Config.xml\" /cmd RunServer");
catch {}
try  {
    //Program 3
    Process x = Process.Start(path + " /runtime  \"C:\\Program Files\\Company\\Config.xml\" /cmd RunServer");
catch {}
于 2013-03-23T15:04:10.843 に答える
0

エラーを無視したいのは奇妙に思えます。とにかく、各プロセスの開始をtrycatchブロックに入れることができます。

try{
   Process.Start(...);     
}catch(Exception e){
   //log error, if you want
}
于 2013-03-23T15:04:33.923 に答える