2010-02-08 6 views
9

Potrzebuję być w stanie uruchomić proces jako inny użytkownik, i znalazłem wiele zasobów i różne metody, aby to zrobić. Problem polega na tym, że muszę uruchomić proces inny niż exe, np. ścieżka z rozszerzeniem html lub w moim przypadku "http://somewebserver/someApp.application".Można użyć personifikacji podczas uruchamiania procesu innego niż exe w języku C#?

Znany jest problem, w którym uruchomione procesy nie dziedziczą kontekstów personifikacji z poziomu programu uruchamiającego. Istnieje również znany problem, w którym procesy uruchamiane przy użyciu różnych poświadczeń muszą być plikami wykonywalnymi (.exe).

Ale w jaki sposób mogę uruchomić plik .application (na przykład) jako inny użytkownik?

(próbowałem wszelkiego rodzaju kombinacje P/odwołujących CreateProcessWithLoginW ustawienie poświadczeń użytkownika/hasło w ProcessStartInfo, itd. Każda twarz te same ograniczenia wymienione powyżej.)

Odpowiedz

3

Podczas uruchamiania non-exe, to właściwie tylko powłoka szukająca pliku EXE lub pliku URL. Wciąż jest zaangażowany exe.

Ponieważ powłoka jest już uruchomiona, nie będzie dziedziczyć twojego podszywania się. Możesz wyszukać samego siebie w rejestrze, a następnie wywołać CreateProcessWithLoginW, zasadniczo symulując to, co robi dla ciebie powłoka.

Na przykład, aby otworzyć plik .txt, spójrz na "HKEY_CLASSES_ROOT \ .txt". Tam zobaczysz typ "txtfile". Następnie wyszukaj "HKEY_CLASSES_ROOT \ txtfile \ shell \ open \ command", a zobaczysz, jaki plik exe użyje shell, czyli (zwykle) "% SystemRoot% \ system32 \ NOTEPAD.EXE% 1".

+0

Dziękuję, to posunęło mnie o krok dalej, ale nadal otrzymuję straszny błąd 0xc0000142 za każdym razem, gdy próbuję uruchomić proces z pewnymi poświadczeniami, ale to inny problem. – vargonian

Powiązane problemy