1

我有 ac# windows 服务应用程序在使用第三方 .dll 处理某些文件时崩溃而没有引发异常。我决定做的是创建一个新的控制台应用程序,它复制一小部分 Windows 服务代码,特别是导致服务崩溃的部分。我想做的是从windows服务中调用新的.exe程序,如果它崩溃了,我自己会抛出一个异常。

所以,我需要调用这个.exe程序(不是在后台,因为我不能让windows服务继续,直到我知道要处理的文件是安全的),然后确定它是否成功退出。我该怎么做呢?我见过的示例在后台进程中运行 .exe,这不是我想要的。

谢谢。

4

1 回答 1

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)或从控制台应用程序的主函数返回 int 值,您可以设置退出代码。或者您可以写入输出,然后在您的服务中检查退出代码 ( process.ExitCode) 或输出流,以便确定进程是否成功退出。

于 2012-06-13T21:52:46.153 回答