远程服务管理

时间:2013-07-24 15:40:32

标签: c# service impersonation

我正在尝试使用ServiceController管理不同计算机上的服务。

        var sc = new ServiceController(serviceName, machine);
        Console.WriteLine(sc.Status);

由于我需要使用不同的凭据,因此我使用以下方式执行模拟:

        var tokenHandle = IntPtr.Zero;
        bool returnValue = LogonUser(userName, domainName, password,
                                     LOGON32_LOGON_NEW_CREDENTIALS,
                                     LOGON32_PROVIDER_DEFAULT,
                                     ref tokenHandle);            
        if (!returnValue)
        {
            throw new Win32Exception(Marshal.GetLastWin32Error());
        }
        WindowsIdentity newId = new WindowsIdentity(tokenHandle);
        impersonatedUser = newId.Impersonate();

模仿似乎有效。但我一直收到InvalidOperationException:

System.InvalidOperationException: Cannot open MyService service on computer 'TargetMachine'. 
---> System.ComponentModel.Win32Exception: Access is denied

我的工作站位于域上,而目标计算机则参与工作组。

关于我在这里缺少什么的想法?

1 个答案:

答案 0 :(得分:0)

  

我的工作站位于域上,而目标计算机则参与工作组

有你的问题。您正在冒充使用本地或域帐户。它们不属于目标机器,因为它位于工作组中。