Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用C#/Windows7连接并登录到远程桌面_C#_Windows 7_Remote Desktop_Mstsc - Fatal编程技术网

使用C#/Windows7连接并登录到远程桌面

使用C#/Windows7连接并登录到远程桌面,c#,windows-7,remote-desktop,mstsc,C#,Windows 7,Remote Desktop,Mstsc,我想写一个应用程序,允许用户在我们公司网络中输入一台机器的登录凭据,然后将他们连接到该机器。显然,远程桌面连接的登录凭据不再保存在Windows7(和Vista?)中的*.RDP文件中,因此不起作用。我知道我可以使用rundll32 keymgr.dll、KRShowKeyMgr查看保存的凭据,但无法通过编程方式将凭据添加到此存储。任何指针或代码示例(最好是C语言,但任何东西都可以)都将不胜感激 您仍然可以将密码放在.rdp文件中,它仍然会遵守密码-除非有组策略设置显式忽略密码 编辑: 无论如何

我想写一个应用程序,允许用户在我们公司网络中输入一台机器的登录凭据,然后将他们连接到该机器。显然,远程桌面连接的登录凭据不再保存在Windows7(和Vista?)中的*.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文件中,它仍然会尊重它们-除非有明确忽略它的组策略设置。您完全正确。请您将您的评论转载为我可以接受的答案好吗。