带有/ process.start用户名,密码和域的Windows服务

时间:2012-08-14 10:18:58

标签: c# .net windows service process

我正在尝试创建一个应该启动进程的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:进程意外终止。

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

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

我最终通过使用函数'CreateUserAsProcess'来解决问题,使用WinNT50和New Credentials设置。