6

我需要使用 C# 更改现有 Windows 服务的凭据。我知道有两种不同的方法可以做到这一点。

  1. ChangeServiceConfig,请参阅pinvoke.net 上的 ChangeServiceConfig
  2. ManagementObject.InvokeMethod 使用 Change 作为方法名称。

两者似乎都不是一种非常“友好”的方式,我想知道我是否错过了另一种更好的方式来做到这一点。

4

2 回答 2

6

这是使用 System.Management 类的一种快速而肮脏的方法。

using System;
using System.Collections.Generic;
using System.Text;
using System.Management;

namespace ServiceTest
{
  class Program
  {
    static void Main(string[] args)
    {
      string theServiceName = "My Windows Service";
      string objectPath = string.Format("Win32_Service.Name='{0}'", theServiceName);
      using (ManagementObject mngService = new ManagementObject(new ManagementPath(objectPath)))
      {
        object[] wmiParameters = new object[11];
        wmiParameters[6] = @"domain\username";
        wmiParameters[7] = "password";
        mngService.InvokeMethod("Change", wmiParameters);
      }
    }
  }
}
于 2008-09-24T11:16:01.693 回答
1

ChangeServiceConfig 是我过去的做法。WMI 可能有点不稳定,我只有在别无选择时才想使用它,尤其是在访问远程计算机时。

于 2009-05-12T22:01:47.220 回答