0

我正在尝试创建一个应该在其中启动进程的 Windows 服务。此过程需要登录到另一个帐户。

    protected override void OnStart(string[] args)
        {
            _thread.Start();
        }

    private void ThreadFunction()
    {
        var process = new Process
                          {
                                  StartInfo =
                                      {
                                          UserName = "User",
                                          Password = "Pass",
                                          UseShellExecute = false,
                                          FileName = @"C:\Program Files\Default Company Name\ServiceProcessInstaller\ConsoleProcess.exe"
                                      }
                              };
        process.Start();
    }

我认为这很简单,但似乎 process.start 和 windows 服务就像油和水。

当我启动该过程时,没有任何反应,最终我给出了一个异常:Windows 无法在本地计算机上启动“AServiceProcess”服务。错误 1067:进程意外终止。

我真的很感谢我能得到的所有帮助,如果有什么不够清楚,请告诉我。

4

2 回答 2

0

我建议您退后一步,查看有关 Windows 服务进程的一些概念信息。服务只是一个在任何登录用户之外启动和运行的进程,在概念上与 Unix 守护进程运行的方式大致相同。您说您的代码代表您想要用来启动另一个进程的服务,但是您上面显示的 Start 方法正在启动一个名为“ServiceProcess.exe”的东西,这看起来非常令人困惑 - 就好像那是您打算运行的真正服务一样。

服务进程需要一组凭据,并且提供(或隐式使用)的凭据显示(根据您的信息)没有启动外部进程所需的权限。

除非这里有非常不寻常的要求,否则我建议您考虑 - 如果可能的话 - 在服务流程本身中实施您需要的操作。您可能能够使上述结构正常工作,但我不确定您是否会发现它可以长期维护。

于 2012-08-14T16:15:58.907 回答
0

我最终通过使用函数“CreateUserAsProcess”解决了这个问题,并设置了 WinNT50 和新凭据。

于 2012-09-11T07:57:53.250 回答