以编程方式创建和启动RDP会话(没有gui)

时间:2010-05-04 16:19:37

标签: c# .net c++ windows

我想知道是否有办法以编程方式在Windows Server上创建和启动远程桌面会话。

我正在尝试创建一个自动工具来创建本地用户,然后启动关联RDP会话。我已经创建了LocalUser并将它们添加到远程桌面用户(使用net.exe)。 但我对下一步感到震惊:创建并启动用户的rdp-session。 如果没有远程桌面客户端Gui,我不知道如何处理这个问题。

我正在使用Windows Server 2003,而我正在使用VS2008和.NET 3.5。

问候。

4 个答案:

答案 0 :(得分:15)

您可以调用mstsc.exe并在命令行上传递参数,告诉它要连接的内容。

mstsc.exe documentation on MSDN

答案 1 :(得分:1)

您可以使用远程桌面ActiveX控件进行连接,您需要在表单中托管它,但不需要显示表单。有关示例,请参阅http://www.codeproject.com/KB/cs/RemoteDesktop_CSharpNET.aspx

答案 2 :(得分:1)

首先,我发现服务器上需要一个选项才能启用终端服务自动登录。

  
      
  1. 在终端服务器上,单击“开始”,指向“程序”,指向   单击管理工具,然后单击   终端服务器连接   配置。
  2.   
  3. 双击rdp-tcp连接,然后单击“高级”。   如果要修改属性   ICA客户端,双击ica-rdp   而是连接,然后单击   属性。
  4.   
  5. 在“自动登录”部分中,单击以清除“提示输入密码”   框。
  6.   
  7. 单击“确定”,单击“确定”,然后单击“连接”菜单上的“退出”。
  8.   

来源:support.microsoft.com/kb/260711

之后,我根据这个项目做了一些事情: codeproject.com/KB/cs/RemoteDesktop_CSharpNET.aspx 对于我测试的内容,我认为不可能省略RDP客户端连接(MsTscLib或mstsc.exe) 我有一些工作,但它肯定是坏的风格。我正在使用ActiveX组件事件来了解连接的结果。即:OnLogonError和OnLoginComplete。

这里是我的来源: http://codepaste.net/uiuuxc

我在等你的评论。

答案 3 :(得分:0)

我编写了一个简单的实用程序来使用提到的@tyranid之类的远程桌面ActiveX控件。我尝试了他的文章中的代码项目链接,尽管在Server 2003上可能对您来说效果很好,但在Windows 10上无法正常工作。此外,该示例中的代码并非完全自动化,因为您仍然需要与之交互GUI来创建会话。在此代码中,您只需调用实用程序,即可传入服务器,用户名,域和密码,一切都将为您完成。

这是一个指向我的问题的链接,该链接比该问题有更多的要求/细节。

Create Windows Session programmatically from Console or Windows Service

这是我的RDP实用程序。如果将此代码放在类库中,则可以从控制台应用程序,winForms应用程序或Windows服务调用它。

注意:您可能需要稍微调整此代码,才能使其与早期参考和.NET 3.5兼容。我认为所有需要做的就是您需要引用API调用的早期版本。我使用的电话是目前可用的最新电话。

int expected, desired;
do {
  expected = a.load(); // <-- load on each iteration
  desired = 2 * expected;
} while (!a.compare_exchange_weak(expected, desired));