Каков наилучший способ изменить учетные данные службы Windows с помощью C # - PullRequest
6 голосов
/ 24 сентября 2008

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

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

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

Ответы [ 2 ]

6 голосов
/ 24 сентября 2008

Вот один быстрый и грязный метод, использующий классы 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);
      }
    }
  }
}
1 голос
/ 13 мая 2009

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

...