我试图编写一个Windows服务,该服务在启动/重新启动时会打开一个程序。我怀疑这会有所不同,但是它是像Excel这样的电子表格程序,以防万一它对于此任务很重要。它位于我的D:驱动器的根目录。在此控制台程序中,Process.Start可以正常工作(所以我知道我在正确使用它):
namespace Example
{
public class Program
{
public static void Main()
{
System.Diagnostics.Process.Start(@"D:\program.exe");
}
}
}
我遵循了本指南:https://docs.microsoft.com/en-us/dotnet/framework/windows-services/walkthrough-creating-a-windows-service-application-in-the-component-designer来编写自己的服务。我在服务项目的OnStart方法中有完全相同的一行,如下所示:
protected override void OnStart()
{
System.Diagnostics.Process.Start(@"D:\program.exe");
}
我以管理员身份打开了安装实用程序,并按照指南中的说明成功地构建和安装了该实用程序。启动服务时没有任何反应,因此我查找了如何调试服务。我将OnStart方法更改为:
protected override void OnStart()
{
System.Diagnostics.Debugger.Launch();
System.Diagnostics.Process.Start(@"D:\program.exe");
}
单步执行代码时,我可以看到Process.Start引发了InvalidOperationException错误。我读了一下它(https://docs.microsoft.com/en-us/dotnet/api/system.invalidoperationexception?view=netframework-4.7.2),但对于如何解决它还是很困惑。在构建和安装时,我尝试了本地用户,本地服务和系统服务帐户,但是没有一个帮助。有没有人在服务中启动可执行文件?