使用C#/Windows7连接并登录到远程桌面
我想写一个应用程序,允许用户在我们公司网络中输入一台机器的登录凭据,然后将他们连接到该机器。显然,远程桌面连接的登录凭据不再保存在Windows7(和Vista?)中的*.RDP文件中,因此不起作用。我知道我可以使用使用C#/Windows7连接并登录到远程桌面,c#,windows-7,remote-desktop,mstsc,C#,Windows 7,Remote Desktop,Mstsc,我想写一个应用程序,允许用户在我们公司网络中输入一台机器的登录凭据,然后将他们连接到该机器。显然,远程桌面连接的登录凭据不再保存在Windows7(和Vista?)中的*.RDP文件中,因此不起作用。我知道我可以使用rundll32 keymgr.dll、KRShowKeyMgr查看保存的凭据,但无法通过编程方式将凭据添加到此存储。任何指针或代码示例(最好是C语言,但任何东西都可以)都将不胜感激 您仍然可以将密码放在.rdp文件中,它仍然会遵守密码-除非有组策略设置显式忽略密码 编辑: 无论如何
rundll32 keymgr.dll、KRShowKeyMgr
查看保存的凭据,但无法通过编程方式将凭据添加到此存储。任何指针或代码示例(最好是C语言,但任何东西都可以)都将不胜感激 您仍然可以将密码放在.rdp文件中,它仍然会遵守密码-除非有组策略设置显式忽略密码
编辑:
无论如何,那篇文章有点过分了。所有混乱的P/Invoke业务都有一个托管包装器。如果您使用.NET2.0来使用该类,则有更简单的方法来执行此操作。(首先添加对System.Security程序集的引用)
添加该引用后,可以执行以下操作:
public string Encrypt(string toEncrypt)
{
var userData = Encoding.Unicode.GetBytes(toEncrypt ?? String.Empty);
return "password 51:b:" + ToHexString(ProtectedData.Protect(userData, new byte[0], DataProtectionScope.CurrentUser));
}
private static string ToHexString(byte[] bytes)
{
if (bytes == null)
{
return String.Empty;
}
return bytes.Aggregate(new StringBuilder(), (sb, b) => sb.AppendFormat("{0:x2}", b)).ToString();
}
就是这样。您仍然可以将密码放在.rdp文件中,它仍然会遵守密码-除非有组策略设置明确忽略密码 编辑: 无论如何,那篇文章有点过分了。所有混乱的P/Invoke业务都有一个托管包装器。如果您使用.NET2.0来使用该类,则有更简单的方法来执行此操作。(首先添加对System.Security程序集的引用) 添加该引用后,可以执行以下操作:
public string Encrypt(string toEncrypt)
{
var userData = Encoding.Unicode.GetBytes(toEncrypt ?? String.Empty);
return "password 51:b:" + ToHexString(ProtectedData.Protect(userData, new byte[0], DataProtectionScope.CurrentUser));
}
private static string ToHexString(byte[] bytes)
{
if (bytes == null)
{
return String.Empty;
}
return bytes.Aggregate(new StringBuilder(), (sb, b) => sb.AppendFormat("{0:x2}", b)).ToString();
}
就是这样。您仍然可以将密码放在.rdp文件中,它仍然会尊重它们-除非有组策略设置明确忽略它。您完全正确。请将您的评论作为我可以接受的答案重新发布,好吗?答案中添加了更多内容。您仍然可以将密码放在.rdp文件中,它仍然会尊重它们-除非有明确忽略它的组策略设置。您完全正确。请您将您的评论转载为我可以接受的答案好吗。