Câu trả lời được chấp nhận giải quyết vấn đề, nhưng có tác dụng phụ đến việc rời khỏi các chứng chỉ trong những người sử dụng cửa hàng ủy nhiệm. Tôi vết thương tạo ra một IDisposable vì vậy tôi có thể sử dụng các thông tin trong một tuyên bố sử dụng.
using (new RDPCredentials(Host, UserPrincipalName, Password))
{
/*Do the RDP work here*/
}
internal class RDPCredentials : IDisposable
{
private string Host { get; }
public RDPCredentials(string Host, string UserName, string Password)
{
var cmdkey = new Process
{
StartInfo =
{
FileName = Environment.ExpandEnvironmentVariables(@"%SystemRoot%\system32\cmdkey.exe"),
Arguments = [email protected]"/list",
WindowStyle = ProcessWindowStyle.Hidden,
UseShellExecute = false,
RedirectStandardOutput = true
}
};
cmdkey.Start();
cmdkey.WaitForExit();
if (!cmdkey.StandardOutput.ReadToEnd().Contains([email protected]"TERMSRV/{Host}"))
{
this.Host = Host;
cmdkey = new Process
{
StartInfo =
{
FileName = Environment.ExpandEnvironmentVariables(@"%SystemRoot%\system32\cmdkey.exe"),
Arguments = [email protected]"/generic:TERMSRV/{Host} /user:{UserName} /pass:{Password}",
WindowStyle = ProcessWindowStyle.Hidden
}
};
cmdkey.Start();
}
}
public void Dispose()
{
if (Host != null)
{
var cmdkey = new Process
{
StartInfo =
{
FileName = Environment.ExpandEnvironmentVariables(@"%SystemRoot%\system32\cmdkey.exe"),
Arguments = [email protected]"/delete:TERMSRV/{Host}",
WindowStyle = ProcessWindowStyle.Hidden
}
};
cmdkey.Start();
}
}
}
Tôi có thể sử dụng PowerShell với C#? Xin lỗi, tôi mới. – Krzysiek
Về cơ bản, ý tưởng là thực thi CMDKEY.EXE để tạo thông tin xác thực tạm thời của bạn trong kho lưu trữ thông tin đăng nhập đã lưu trữ và sau đó thực thi MSTSC.EXE. MSTSC nên tìm thông tin đăng nhập và sử dụng chúng. Bạn có thể thực hiện các chương trình này từ bên trong C# bằng cách sử dụng 'Process.Start'; bạn không cần Powershell. –
Làm việc như một say mê !!! Cảm ơn rất nhiều! – Krzysiek