C#:Process.Start可在控制台中使用,但不能用于服务

时间:2018-08-21 02:56:07

标签: c# windows-services

我试图编写一个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),但对于如何解决它还是很困惑。在构建和安装时,我尝试了本地用户,本地服务和系统服务帐户,但是没有一个帮助。有没有人在服务中启动可执行文件?

0 个答案:

没有答案