3

我正在尝试在 C# 中打开 3 个程序,但是,如果发生错误,我仍然希望代码继续。换句话说,如果程序 1 出现问题,程序 2 和 3 仍应尝试打开。我也不想检查文件存在,因为程序需要一些开关,任何事情都可能失败。
如果程序 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...Catchfor 每个调用。

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

您想忽略错误似乎很奇怪。无论如何,您可以将每个进程都放在 try catch 块中:

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