Каков наилучший способ изменить учетные данные службы Windows с помощью С#

Мне нужно изменить учетные данные уже существующей службы Windows с помощью С#. Я знаю два разных способа сделать это.

  1. ChangeServiceConfig, см. ChangeServiceConfig на сайте pinvoke.net.
  2. ManagementObject.InvokeMethod с использованием Change в качестве имени метода.

Ни один из них не кажется очень «дружественным» способом сделать это, и мне было интересно, не упускаю ли я другой и лучший способ сделать это.


person Maurice    schedule 24.09.2008    source источник


Ответы (2)


Вот один быстрый и грязный метод с использованием классов 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);
      }
    }
  }
}
person Magnus Johansson    schedule 24.09.2008

ChangeServiceConfig — это то, как я делал это раньше. WMI может быть немного ненадежным, и я хочу использовать его только тогда, когда у меня нет другого выбора, особенно при переходе на удаленный компьютер.

person Adam Says - Reinstate Monica    schedule 12.05.2009