0

我正在尝试使用 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

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

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

4

1 回答 1

0

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

有你的问题。您正在使用本地或域帐户进行模拟。它们不是目标机器的一部分,因为它在工作组中。

于 2013-07-24T18:32:24.860 回答