继续讲到这一点,无法解决……我正在创建一个用于工作的应用程序,该应用程序实际上将我们所有的工具编译为一个易于使用的GUI。我们使用的工具之一是我们从第三方那里使用的工具,并通过RDWeb托管为远程应用程序。现在,我还可以进行常规的远程桌面访问,并且可以使用MSTSC和this process通过Winform来访问桌面,效果很好。我很好奇是否可以仅将RemoteAPP而不是整个桌面加载到MSTSC控件中,以使我的用户无法进入整个桌面。或者,如果还有其他方法只能在Winforms中承载RemoteAPP。

我已经查看了有关ITSRemoteProgram的MSDN文档,但是当我尝试以下操作时,它只会引发异常。调试器在rdp.RemoteProgram.RemoteProgramMode = true;处停止并给出HRESULT E_FAIL异常。

我还尝试在OnConnected事件触发后使用remoteprogram,并且得到相同的结果。

try
{
    rdp.Server = "FFWIN2008R2DC.fflab123.net";
    rdp.Domain = "fflab123";
    rdp.UserName = "administrator";
    IMsTscNonScriptable secured = (IMsTscNonScriptable)rdp.GetOcx();
    secured.ClearTextPassword = "password123";
    rdp.OnConnected += rdp_OnConnected;
    rdp.RemoteProgram.RemoteProgramMode = true;
    rdp.RemoteProgram2.RemoteApplicationName = "Calculator";
    rdp.RemoteProgram2.RemoteApplicationProgram = @"C:\Windows\system32\calc.exe";

    rdp.Connect();
}
catch (Exception Ex)
{
    MessageBox.Show("Error Connecting", "Error connecting to remote desktop " + " Error:  " + Ex.Message, MessageBoxButtons.OK, MessageBoxIcon.Error);
}

也许我走错路了,甚至不可能。我只想朝着正确的方向前进,我不需要任何人为我写这篇文章。

最佳答案

IMsRdpClient.RemoteProgram.RemoteProgramMode仅在从MsRdpClientNotSafeForScripting类ID初始化的客户端上有效。有关适当的CLSID,请参见this MSDN page,或使用AxMsRdpClientNotSafeForScripting interop类。

var rc = new AxMsRdpClient7NotSafeForScripting();
rc.Dock = DockStyle.Fill;
this.Controls.Add(rc);
rc.RemoteProgram.RemoteProgramMode = true;
// ServerStartProgram can only be called on an open session; wait for connected until calling
rc.OnConnected += (_1, _2) => { rc.RemoteProgram.ServerStartProgram(@"%SYSTEMROOT%\notepad.exe", "", "%SYSTEMROOT%", true, "", false); };
rc.Server = "server.name";
rc.UserName = "domain\\user";
// needed to allow password
rc.AdvancedSettings7.PublicMode = false;
rc.AdvancedSettings7.ClearTextPassword = "password";
// needed to allow dimensions other than the size of the control
rc.DesktopWidth = SystemInformation.VirtualScreen.Width;
rc.DesktopHeight = SystemInformation.VirtualScreen.Height;
rc.AdvancedSettings7.SmartSizing = true;

rc.Connect();

10-08 06:54