我正在尝试使用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
我的工作站位于域上,而目标计算机则参与工作组。
关于我在这里缺少什么的想法?
答案 0 :(得分:0)
我的工作站位于域上,而目标计算机则参与工作组
有你的问题。您正在冒充使用本地或域帐户。它们不属于目标机器,因为它位于工作组中。