Jak uruchomić powłokę Eksploratora Windows po uruchomieniu innej?

6

Poniżej znajduje się hack, ale za to, czego potrzebuję za jego grzywnę.

Stworzyłem program C #, który pokazuje tekst EULA i ma przycisk Zgadzam się i nie zgadzam.

Ustawiłem HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell uruchomić ten program.

Po uruchomieniu komputera pojawia się zwykły monit logowania.

Po zalogowaniu uruchamia się niestandardowy program EULA.

Nie ma powłoki eksploratora, menu startowego, tła itp. (Tego właśnie chcę).

Przycisk nie zgadza się wyłącza komputer i działa dobrze.

Chcę, aby przycisk Agree ładował normalną powłokę Eksploratora Windows (menu Start, tło itp.).

Użyłem następującego polecenia C #: Process.Start("explorer.exe");

Jednak uruchamia to okno eksploratora, a nie powłokę. Chcę uruchomić powłokę.

czego mi brakuje?

Keltari
źródło
2
czy program explorer.exe działa już jako proces pulpitu, gdy go wywołujesz? jeśli nie ma instancji eksploratora uruchomionej dla logowania, spowoduje to zrobienie procesu pulpitu, ale jeśli już działa, pojawi się okno eksploratora. w jakim kontekście działa Twoja aplikacja? Zakładam, że to przed logowaniem? jeśli nie, proces netlogin prawdopodobnie spowodował już proces pulpitu.
Frank Thomas
Nie, explorer.exe nie działa, gdy uruchamiana jest niestandardowa powłoka. Nie działa, dopóki nie kliknę przycisku Zgadzam się. Zakładam, że muszę zacząć coś innego niż explorer.exe ... Nie wiem ...
Keltari
Czy robisz to dla połączeń RDP, czy też musisz pokazać swoją EULA także użytkownikom zalogowanym lokalnie? Jeśli RDP próbuje tylko użyć ta polityka grupowa (witryna może być niestabilna w przeglądarkach innych niż IE) zamiast używanego klucza rejestru.
Scott Chamberlain
patrząc na ten artykuł, wygląda na to, że ta metoda nie zadziała ... social.technet.microsoft.com/Forums/windows/en-US/…
Keltari
1
Bardzo wątpię w potrzebę wymiany całej powłoki tylko po to, aby pokazać EULA. Globalne rozwiązanie lokalnego problemu.
surfasb

Odpowiedzi:

3

W Windows10, aby ponownie uruchomić Pulpit Eksploratora, musisz ustawić klucz rejestru Shell na „explorer.exe” i zabić proces „sihost.exe” lub ponownie uruchomić nowy proces „sihost.exe”.

Jieff
źródło
To wszystko, ponowne uruchomienie sihost.exe zrobiło to dla mnie. Wielkie dzięki!
cheeesus
2

Robię dokładnie to samo, co robisz, oto jak uruchamiam Explorer

Process explorer = new Process();
explorer.StartInfo.FileName =
    Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), "explorer.exe");
if (explorer.Start() == false)
{
    MessageBox.Show("Explorer failed to start.");
}
else
{

    //(Snip) some other code that is not relevant.

    explorer.WaitForExit();
}

//(Snip) some cleanup code I run after the user logs off.

i działa dobrze.

Teraz robię to w sesji RDP za pomocą ta polityka grupowa ( Computer Configuration\Administrative Templates\Windows Components\Remote Desktop Services\Remote Desktop Session Host\Remote Session Environment\Start a program on connection ) nie poprzez plik rejestru, którego używasz, więc może dlatego działa dla mnie, a nie dla ciebie.

Inną rzeczą, którą mogę robić inaczej, jest również wołanie explorer.WaitForExit(); w moim kodzie i poczekaj, aż eksplorator zamknie się przed zamknięciem mojej aplikacji.

Spróbuj użyć sposobu, w jaki rozpoczynam eksplorację i sprawdź, czy działa dla Ciebie.

Scott Chamberlain
źródło
Wypróbowałem twój kod, ale po prostu uruchamia okno eksploratora plików, a nie powłokę
Keltari
@Keltari czy potrzebujesz wsparcia dla lokalnych loginów lub czy tylko pokaże EULA dla użytkowników RDP, którzy pracują nad tym, co chcesz zrobić?
Scott Chamberlain
1

Explorer musi zobaczyć niektóre spełnione warunki, aby uruchomić go jako powłokę:

  1. Eksplorator nie może działać (na przykład w Panelu sterowania)
  2. Explorer musi zobaczyć, że jest to rzeczywista powłoka - dlatego przed uruchomieniem explorer.exe należy ją zastąpić (może to zmienić kilka sekund później)
  3. Czasami wydaje się (w nowszych wersjach Windows) to zależy od procesu, który uruchamia explorer.exe - jeśli jest „znany” dla explorer.exe - nie mam jednak więcej szczegółów dla tej części (i nie można zmień to niestety)

Sądząc po twoim pytaniu, brakuje ci przynajmniej części 2.

JeffRSon
źródło
-1

Zmodyfikuj rejestr, umieść explorer.exe w powłoce, uruchom nowy proces explorer.exe (nie masz uruchomionego żadnego procesu explorer.exe) i zwróć powłokę do swojej powłoki (pusta wartość, jeśli potrzeba).

Andypadullos
źródło
1
Przepisz to w języku angielskim (np. Wiele pełnych zdań z poprawną gramatyką). Rozwiń skrót, np. „Modyfikuj rejestr” do użytecznych instrukcji. Nie odpowiadaj w komentarzach; edytować twoja odpowiedź zrobi to jaśniej i pełniej.
G-Man