2013-05-30 22 views
12

Continua a tornare a questo e non riesco a capirlo ... Sto creando un'app per il lavoro che essenzialmente compila tutti i nostri strumenti in una GUI più facile da usare. Uno degli strumenti che usiamo è qualcosa che usiamo da una terza parte ed è ospitato come app remota tramite RDWeb. Ora ho anche un normale accesso remoto al desktop e posso accedere al desktop tramite il mio Winform usando MSTSC e this process che funziona magnificamente. Sono curioso di sapere se è possibile caricare RemoteAPP e non l'intero desktop nel controllo MSTSC in modo che i miei utenti non arrivino al desktop completo. O se esiste un altro modo per ospitare un RemoteAPP solo all'interno di Winforms.Hosting RemoteAPP session in Winform

Ho esaminato la documentazione MSDN su ITSRemoteProgram ma quando provo quanto segue si limita a fare un'eccezione. Il debugger si ferma a rdp.RemoteProgram.RemoteProgramMode = true; e dà un'eccezione E_FAIL HRESULT.

Ho anche provato a utilizzare remoteprogram dopo l'attivazione dell'evento OnConnected e ottengo gli stessi risultati.

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

Forse sto andando a questo nel modo sbagliato o forse non è nemmeno possibile. Vorrei solo una piccola spinta nella direzione corretta. Non ho bisogno che qualcuno scriva questo per me.

+0

Nessuno ha informazioni su questo? Immagino che questo spieghi perché non riesco a capirlo o lol. – Nabbic

risposta

2

IMsRdpClient.RemoteProgram.RemoteProgramMode è valido solo per i client inizializzati dagli ID classe MsRdpClientNotSafeForScripting. Vedere this MSDN page per i CLSID appropriati o utilizzare la classe di interoperabilità 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

Grazie per la risposta! Quindi l'ho implementato parzialmente con successo. Mi fa un passo avanti, penso ma non completamente lì. Ora, quando provo a connetterlo, almeno mi connetto con RemoteProgramMode true e posso vederlo accedere e poi come caricherà il blocco note, per esempio si siede su una schermata blu e non carica mai realmente il programma. Non riesco a ottenere un desktop o solo una schermata blu come se stesse per caricare l'app, ma non riesce ancora. Qualche idea? – Nabbic

+0

Sembra anche disconnettersi dopo circa 5 minuti automaticamente ... – Nabbic

+0

@Nabbic, Se non si avvia un'applicazione, o se si tenta di avviare un'applicazione che non è consentita o non esiste, si finirà con desktop blu visibile solo Assicurati di aver aperto il programma. È possibile verificare utilizzando il task manager o un altro programma in esecuzione sul server di destinazione. Inoltre, assicurati di impostare i membri 'DesktopWidth' e' DesktopHeight', oppure sei limitato alle dimensioni del controllo come inserito nel modulo. Il timeout di 5 minuti è se non ci sono applicazioni aperte sul server remoto. – Mitch