我有一个要求,当单击按钮时,应用程序连接到远程电脑,用户可以浏览到 c 驱动器上的文件夹,然后将文件复制到他们的电脑(不是在 LAN 上,而是在远程位置)
使用远程桌面连接时,详细信息为(例如):
计算机:abcd.dyndns.org:1234
用户名:bob2\apple
密码:password
在使用 WMI 或 Impersonation 进行一些研究之后,似乎是最好的选择。这就是我使用模拟方法的地方..
[DllImport("advapi32.DLL", SetLastError=true)]
public static extern int LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType,
int dwLogonProvider, ref IntPtr phToken);
private void button4_Click(object sender, EventArgs e)
{
WindowsIdentity wid_current = WindowsIdentity.GetCurrent();
WindowsImpersonationContext wic = null;
try
{
IntPtr admin_token = new IntPtr();
if (LogonUser("bob2\apple", "abcd.dyndns.org:1234","password",9, 0, ref admin_token) != 0)
{
wic = new WindowsIdentity(admin_token).Impersonate();
// NOT SURE ABOUT THIS BIT.....
File.Copy(@"", @"", true);
MessageBox.Show("Copy Succeeded");
}
else
{
MessageBox.Show("Copy Failed");
}
}
catch(Exception se)
{
int ret = Marshal.GetLastWin32Error();
MessageBox.Show(ret.ToString(), "Error code: " + ret.ToString());
MessageBox.Show(se.Message);
}
finally
{
if (wic != null)
wic.Undo();
}
}