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.