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
私のワークステーションはドメイン上にあり、ターゲット マシンはワークグループに参加しています。
ここで何が欠けているかについて何か考えはありますか?