这段代码在我这里可以正常工作:
但是...这意味着每次需要模拟(在远程机器=服务器上执行某些操作)时,我都必须重复"Button1_Click()"中的最后一段代码。 所以我的问题是:是否可能像这个示例一样做到这一点?
[DllImport("advapi32.dll", SetLastError = true)]
public static extern bool LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
[DllImport("kernel32.dll")]
public static extern bool CloseHandle(IntPtr token);
enum LogonType
{
Interactive = 2,
Network = 3,
Batch = 4,
Service = 5,
Unlock = 7,
NetworkClearText = 8,
NewCredentials = 9
}
enum LogonProvider
{
Default = 0,
WinNT35 = 1,
WinNT40 = 2,
WinNT50 = 3
}
private void Button1_Click()
{
IntPtr token = IntPtr.Zero;
LogonUser("Administrator",
"192.168.1.244",
"PassWord",
(int)LogonType.NewCredentials,
(int)LogonProvider.WinNT50,
ref token);
using (WindowsImpersonationContext context = WindowsIdentity.Impersonate(token))
{
CloseHandle(token);
/*
Code_of_Do_Something
*/
}
}
但是...这意味着每次需要模拟(在远程机器=服务器上执行某些操作)时,我都必须重复"Button1_Click()"中的最后一段代码。 所以我的问题是:是否可能像这个示例一样做到这一点?
![enter image description here](https://istack.dev59.com/vucae.webp)
CloseHandle
应该放在代码之后,不是吗?实际上,它应该在自己的finally
块中,以便始终执行。 - Konrad RudolphCloseHandle
在那里?如果WindowsIdentity.Impersonate()
失败,那么您根本不会调用它。 - David Heffernan