Kann Identitätswechsel beim Starten eines Nicht-Exe-Prozesses in C # verwendet werden?

9

Ich muss in der Lage sein, einen Prozess als einen anderen Benutzer auszuführen, und ich habe viele Ressourcen und verschiedene Methoden gefunden, um dies zu tun. Das Problem ist, dass ich einen Nicht-EXE-Prozess ausführen muss, z. ein Pfad mit HTML-Erweiterung oder in meinem Fall " Ссылка ".

Es gibt ein bekanntes Problem, bei dem gestartete Prozesse Identitätskontexte nicht von ihrem Startprogramm erben. Außerdem gibt es ein bekanntes Problem, bei dem unter verschiedenen Anmeldeinformationen gestartete Prozesse ausführbare Dateien (.exe) sein müssen.

Aber wie würde ich eine .application-Datei (zum Beispiel) als ein anderer Benutzer starten?

(Ich habe alle möglichen Kombinationen von p / createProcessWithLoginW versucht, die Benutzer / Passwort-Anmeldeinformationen in ProcessStartInfo usw. setzen. Jeder hat die gleichen oben genannten Einschränkungen.)

    
vargonian 08.02.2010, 23:46
quelle

1 Antwort

3

Beim Starten einer Nicht-Exe ist es eigentlich nur die Shell, die die exe nachsucht, um sie für die Datei oder URL zu verwenden. Es ist immer noch eine exe beteiligt.

Da die Shell bereits ausgeführt wird, wird sie Ihren Identitätswechsel nicht erben. Sie könnten die exe selbst in der Registry nachschlagen und dann CreateProcessWithLoginW aufrufen, was im Wesentlichen simuliert, was die Shell für Sie tut.

Um beispielsweise eine .txt-Datei zu öffnen, suchen Sie in "HKEY_CLASSES_ROOT \ .txt" nach. Dort sehen Sie den Typ "txtfile". Dann schaue nach "HKEY_CLASSES_ROOT \ txtfile \ shell \ open \ command" und du wirst sehen, welche EXE-Datei die Shell verwenden wird (normalerweise) "% SystemRoot% \ system32 \ NOTEPAD.EXE% 1".

    
Adam Ruth 09.02.2010, 00:06
quelle

Tags und Links