2010-10-25 105 views
0

我编写了以下代码来更改与Windows服务关联的用户帐户和密码。如何修改此代码以便能够在远程系统上执行相同的操作?修改代码以在远程服务器上执行操作

static void Main(string[] args) 
     { 
      string serviceName = "DummyService"; 
      string username = ".\\Service_Test2"; 
      string password = "Password1"; 

      ServiceController sc = new ServiceController(serviceName); 

      Console.WriteLine(sc.Status.ToString()); 

      if (sc.Status == ServiceControllerStatus.Running) 
      { 
       sc.Stop(); 
      } 
      Thread.Sleep(2000); 
      sc.Refresh(); 
      Console.WriteLine(sc.Status.ToString()); 

      string objPath = string.Format("Win32_Service.Name='{0}'", serviceName); 
      using (ManagementObject service = new ManagementObject(new ManagementPath(objPath))) 
      { 
       object[] wmiParams = new object[11]; 
       wmiParams[6] = username; 
       wmiParams[7] = password; 
       service.InvokeMethod("Change", wmiParams); 
      } 

      Thread.Sleep(2000); 

      Console.WriteLine(sc.Status.ToString()); 

      if (sc.Status == ServiceControllerStatus.Stopped) 
      { 
       sc.Start(); 
      } 
      Thread.Sleep(2000); 
      sc.Refresh(); 
      Console.WriteLine(sc.Status.ToString()); 

     } 

回答

2
  1. 使用ServiceController constructor overload,让目标机器名被指定

  2. 修改WMI对象路径包括目标服务器。

    new ManagementPath(
        "\\\\ComputerName\\root" + 
        "\\cimv2:Win32_Service.Name='{0}'"); 
    
  3. 确保您的用户名/密码有目标机器上足够的权限,如果不改变这些。

+0

得到第1步。谢谢。你能否详细说明或给出步骤2的链接? – xbonez 2010-10-25 17:01:02

+0

@xbonez - 当您发布此评论时,编辑工作正在进行中......现在看到 – 2010-10-25 17:03:36

+0

谢谢。我会试试 – xbonez 2010-10-25 17:06:39

相关问题