我所拥有的是一个Windows服务调用我正在运行的控制台应用程序。但是,当服务再次运行时,控制台应用程序不会关闭。最好是让应用程序在运行完毕后关闭,或让服务关闭它?在任何一个原因中你能举例说明如何关闭它吗?
while (true)
{
try
{
string ectory = @"C:\Program Files\Checker.exe";
EventLog.WriteEntry("PriceGrab", "Calling executeable");
var p = Process.Start(ectory);
if (!p.WaitForExit(30000))
{
p.Kill();
}
System.Threading.Thread.Sleep(600000); // wait 10 minutes
}
catch (Exception ex)
{
EventLog.WriteEntry("PriceGrabCall", ex.Message, EventLogEntryType.Warning);
}
这就是我的Service可执行文件中的内容。这不会关闭应用程序。该应用程序旨在每10分钟运行一次。 N / M现在有效......
答案 0 :(得分:3)
这取决于控制台应用程序的性质。如果它像一个服务器应用程序,它不会退出(有一个无限循环...),那么你只需启动它一次,只有当你不再需要它时才杀掉它(或者只是让它继续运行......) 。如果它假定退出,你可以给它一些时间来关闭它自己,然后如果它没有完成则杀掉它:
var p = Process.Start( ... );
// ...
if (!p.WaitForExit(5000)) { // wait 5 seconds
p.Kill();
}
但是在杀死这样的进程时要小心。你可能会失去他们正在做的工作。
答案 1 :(得分:0)
只是一个可能更强大的建议:我过去做过类似的事情并使用了一个解决方案,其中控制台应用程序每5分钟左右通过Windows Task Scheduler进行调度,服务检查新文件由控制台应用程序使用文件系统观察程序创建。