2 Stimmen

Wie kann ich einen Internet Explorer-Prozess als anderen Benutzer starten, ähnlich wie bei /netonly?

Ich versuche, Internet Explorer als anderen Benutzer aus unserer WPF-App zu starten, damit unsere Benutzer beim Besuch der (internen) Website über die integrierte Windows-Authentifizierung lautlos authentifiziert werden.

Wir möchten iexplore.exe nicht als den anderen Benutzer starten, weil es zu seltsamen Bereitstellungs-/Umgebungsproblemen kommt, wenn Sie einen Prozess zum ersten Mal auf einem Computer starten und dieser versucht, IE7/8 zum ersten Mal einzurichten. Wenn Sie jedoch eine Lösung dafür haben, wie man jeden IE-Installer auf jedem Computer stumm schaltet, würde ich das gerne hören.

Zurück zu meiner eigentlichen Frage. Ich kann das gewünschte IE-Imitierungsverhalten genau vom Befehlszeilenfenster aus mit runas erreichen (dank https://serverfault.com/questions/70376/runas-domain-account-still-asks-for-password):

c:\> runas /noprofile /netonly /user:MyDomain\MyUser iexplore.exe

*Hinweis: Ich kann runas aus unserer WPF-App aus vielen Gründen nicht verwenden, aber das Endresultat ist, was ich möchte.

Wie auch immer, ich würde gerne den C#-Code haben, der ein runas /noprofile /netonly iexplore.exe ausführt.

Ich bin auf halbem Weg mit P/Invoke bei CreateProcessWithLogonW. Das ist, was ich habe:

uint LOGON_NETCREDENTIALS_ONLY = 2;
var lpStartupInfo = new CreateProcessWithLogonW_PInvoke.STARTUPINFO();
CreateProcessWithLogonW_PInvoke.PROCESS_INFORMATION processInformation;

CreateProcessWithLogonW_PInvoke.CreateProcessWithLogonW(
                Benutzername,
                Domäne,
                pw,
                LOGON_NETCREDENTIALS_ONLY,
                null,
                commandLine,
                0,
                null,
                null,
                ref lpStartupInfo,
                out processInformation);

Dies startet erfolgreich Internet Explorer, imitiert den Benutzer jedoch überhaupt nicht. Ich kann den Benutzer über den runas-Befehl imitieren, daher bin ich mir zu 98 % sicher, dass das Scheitern der Authentifizierung keine IE-/Zone-/Passwort-/IIS-Einstellung ist, sondern einfach etwas, das ich in meinem Aufruf von CreateProcessWithLogonW() falsch mache.

Eine Sache, die ich bemerkt habe, ist, dass der runas /netonly-Befehl nur funktioniert, wenn ich den /noprofile-Schalter hinzufüge, was mich vor ein Rätsel stellt. Ich habe keine Ahnung, wie ich den Äquivalent dieses Schalters über P/Invoke in C# setzen kann.

Hilfe wird geschätzt, entweder mit der Lösung des Problems "IE startet einen Assistenten, wenn ich ihn das erste Mal starte", oder bei der Suche nach der seltsamen P/Invoke-Einstellung, die mir fehlt.

4voto

Peter Seale Punkte 4575

Okay, ich war sehr sehr nah dran. Der magische Fix besteht darin, -noframemerging zum Aufruf von iexplore.exe hinzuzufügen, was...ehrlich gesagt weiß ich nicht genau, was es bewirkt, es verwendet den Begriff "Prozessrahmen", der großartig ist und möglicherweise Ihnen etwas bedeutet.

In jedem Fall scheint das Problem behoben zu sein.

var arguments = "-noframemerging " + url;
var pathToIExploreExe = GetFullPathToIExploreExe();
var commandLine = string.Format("\"{0}\" {1}", pathToIExploreExe, arguments);

uint LOGON_NETCREDENTIALS_ONLY = 2;
var lpStartupInfo = new CreateProcessWithLogonW_PInvoke.STARTUPINFO();
CreateProcessWithLogonW_PInvoke.PROCESS_INFORMATION processInformation;

CreateProcessWithLogonW_PInvoke.CreateProcessWithLogonW(
            userName,
            domain,
            pw,
            LOGON_NETCREDENTIALS_ONLY,
            null,
            commandLine,
            0,
            null,
            null,
            ref lpStartupInfo,
            out processInformation);

0voto

Jacob Seleznev Punkte 7892

CreateProcessWithLogonW erfordert, dass das angegebene Benutzerkonto darf sich interaktiv anmelden. Könnte das ein Problem sein? Probieren Sie die CreateProcessAsUser Funktion aus, wenn das funktioniert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X