2013-05-30 12 views
12

Wracam do tego i nie mogę tego rozgryźć ... Tworzę aplikację do pracy, która zasadniczo kompiluje wszystkie nasze narzędzia w jeden, łatwiejszy w obsłudze GUI. Jednym z narzędzi, z których korzystamy, jest coś, czego używamy od strony trzeciej i jest hostowany jako aplikacja zdalna za pośrednictwem RDWeb. Teraz mam również zwykły dostęp do zdalnego pulpitu i mogę uzyskać dostęp do pulpitu za pośrednictwem mojego WinForm przy użyciu MSTSC i this process, który działa pięknie. Ciekaw jestem, czy możliwe jest załadowanie RemoteAPP, a nie całego pulpitu w formancie MSTSC, aby moi użytkownicy nie dostali się do pełnego pulpitu. Lub jeśli istnieje inny sposób hostowania RemoteAPP Tylko w WinForm.Hosting sesji RemoteAPP w WinForm

Przeglądałem dokumentację MSDN pod numerem ITSRemoteProgram, ale kiedy wypróbowałem poniższe, po prostu wyrzucono wyjątek. Debuger zatrzymał się pod numerem rdp.RemoteProgram.RemoteProgramMode = true; i nadał wyjątek HRESULT E_FAIL.

Próbowałem również używać remoteprogram po uruchomieniu zdarzenia OnConnected i otrzymuję takie same wyniki.

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

Być może idę na to w niewłaściwy sposób, a może nawet nie jest to możliwe. Chciałbym tylko szturchnięcia we właściwym kierunku. Nie potrzebuję nikogo, żeby to dla mnie napisał.

+0

Nikt nie ma żadnych informacji na ten temat? Myślę, że to wyjaśnia, dlaczego nie mogę tego rozgryźć ani lol. – Nabbic

Odpowiedz

2

IMsRdpClient.RemoteProgram.RemoteProgramMode jest poprawna tylko na klientach zainicjalizowanych z numerów identyfikacyjnych klasy MsRdpClientNotSafeForScripting. Zobacz this MSDN page dla odpowiednich identyfikatorów CLSID lub użyj klasy interopowej 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

Dzięki za odpowiedź! Więc wdrożyłem to częściowo pomyślnie. To dla mnie krok do przodu, myślę, ale nie w pełni. Teraz, kiedy próbuję go połączyć, przynajmniej łączy się z RemoteProgramMode true i widzę, że loguje się, a następnie, gdy ładuje notatnik, na przykład po prostu siedzi na niebieskim ekranie i nigdy nie ładuje programu. Nie dostaję pulpit po prostu niebieski ekran, jak to będzie ładować aplikację, ale nadal nie. Jakieś pomysły? – Nabbic

+0

Wydaje się również wylogowywać po około 5 minutach automatycznie ... – Nabbic

+0

@Nabbic, jeśli nie uruchomisz aplikacji lub spróbujesz uruchomić aplikację, która jest niedozwolona lub nie istnieje, otrzymasz tylko niebieski pulpit widoczny. Upewnij się, że otwierasz program. Możesz zweryfikować używając menedżera zadań lub innego programu działającego na serwerze docelowym. Dodatkowo, upewnij się, że ustawiłeś elementy 'DesktopWidth' i' DesktopHeight' lub ograniczasz się do rozmiaru kontrolki umieszczonej w formularzu. Limit czasu 5 minut to brak otwartych aplikacji na serwerze zdalnym. – Mitch