2013-05-30 6 views
12

Kommen Sie immer wieder darauf zurück und können es nicht herausfinden ... Ich erstelle eine App für die Arbeit, die im Wesentlichen alle unsere Tools in einer einfach zu bedienenden GUI zusammenstellt. Eines unserer Tools verwenden wir von Drittanbietern und werden als Remote-App über RDWeb gehostet. Jetzt habe ich auch nur einen normalen Remote-Desktop-Zugang und ich kann über Winform mit MSTSC und this process auf den Desktop zugreifen, was wunderbar funktioniert. Ich bin gespannt, ob es möglich ist, nur das RemoteAPP und nicht den gesamten Desktop in das MSTSC-Steuerelement zu laden, damit meine Benutzer nicht auf den vollständigen Desktop gelangen. Oder wenn es eine andere Möglichkeit gibt, ein RemoteAPP nur innerhalb von Winforms zu hosten.Hosting RemoteAPP-Sitzung in Winform

Ich habe die MSDN-Dokumentation auf ITSRemoteProgram überprüft, aber wenn ich Folgendes versuche, wird nur eine Ausnahme ausgelöst. Der Debugger stoppt bei rdp.RemoteProgram.RemoteProgramMode = true; und gibt eine HRESULT E_FAIL-Ausnahme.

Ich habe auch versucht, die remoteprogram nach dem OnConnected Ereignis ausgelöst und ich bekomme die gleichen Ergebnisse.

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); 
} 

Vielleicht gehe ich hier auf die falsche Art oder vielleicht ist es gar nicht möglich. Ich möchte nur in die richtige Richtung schubsen. Ich brauche niemanden, der das für mich schreibt.

+0

Niemand hat Informationen dazu? Ich denke, das erklärt, warum ich es auch nicht herausfinden kann. – Nabbic

Antwort

2

IMsRdpClient.RemoteProgram.RemoteProgramMode ist nur für Clients gültig, die von den Klassen-IDs MsRdpClientNotSafeForScripting initialisiert wurden. Die entsprechenden CLSIDs finden Sie unter this MSDN page oder verwenden Sie die Interop-Klasse AxMsRdpClientNotSafeForScripting.

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(); 
+0

Danke für die Antwort! Also habe ich das teilweise erfolgreich umgesetzt. Es bringt mich einen Schritt vorwärts, denke ich, aber nicht ganz da. Jetzt, wenn ich versuche und verbinde es mindestens verbindet sich mit RemoteProgramMode wahr und ich kann sehen, wie es sich einloggen und dann wie es zum Beispiel Notepad laden wird, es sitzt nur auf einem blauen Bildschirm und lädt nie wirklich das Programm. Ich bekomme keinen Desktop, nur einen blauen Bildschirm, als ob er die App lädt, aber immer noch nicht funktioniert. Irgendwelche Ideen? – Nabbic

+0

scheint auch automatisch nach ca. 5 Minuten abzumelden ... – Nabbic

+0

@Nabbic, Wenn Sie nicht über eine Anwendung starten, oder wenn Sie versuchen, eine Anwendung zu starten, die nicht erlaubt ist oder nicht existiert, werden Sie mit dem Ende blauer Desktop nur sichtbar. Stellen Sie sicher, dass Sie das Programm öffnen. Sie können überprüfen, ob Sie den Task-Manager oder ein anderes auf dem Zielserver ausgeführtes Programm verwenden. Stellen Sie außerdem sicher, dass Sie die Mitglieder 'DesktopWidth' und' DesktopHeight' festlegen, oder dass Sie auf die Größe des Steuerelements beschränkt sind, das im Formular platziert wird. Das Timeout von 5 Minuten ist gegeben, wenn auf dem Remote-Server keine Anwendungen geöffnet sind. – Mitch