我有一个c#windows服务应用程序在使用第三方.dll处理某些文件时崩溃而不会抛出异常。我决定做的是创建一个新的控制台应用程序,它复制一小部分Windows服务代码,特别是导致服务崩溃的部分。我想要做的是从Windows服务调用新的.exe程序,如果它崩溃,我自己抛出一个异常。
所以,我需要调用这个.exe程序(不在后台,因为我不能让Windows服务继续,直到我知道要处理的文件是安全的),然后确定它是否已成功退出或不。我该怎么做呢?我见过的例子在后台进程中运行了.exe,这不是我想要的。
感谢。
答案 0 :(得分:3)
看看这个SO answer如何从Windows服务运行控制台应用程序。只需添加WaitForExit,如下所示:
ProcessStartInfo info = new ProcessStartInfo(@"c:\myprogram.exe");
info.UseShellExecute = false;
info.RedirectStandardError = true;
info.RedirectStandardInput = true;
info.RedirectStandardOutput = true;
info.CreateNoWindow = true;
info.ErrorDialog = false;
info.WindowStyle = ProcessWindowStyle.Hidden;
Process process = Process.Start(info);
process.WaitForExit();
在控制台应用程序中,如果退出Environment.Exit(statusCode)
或从控制台应用程序的main函数返回int值,则可以设置退出代码。或者您可以写入输出,然后在您的服务中检查退出代码(process.ExitCode
)或输出流,以便您可以确定流程是否已成功退出。