Je tente de lancer Internet Explorer en tant qu'autre utilisateur depuis notre application WPF, afin que lorsque nos utilisateurs visitent le site Web (interne), ils s'authentifient automatiquement via l'authentification Windows intégrée.
Nous ne voulons pas lancer iexplore.exe en tant qu'autre utilisateur en raison de problèmes étranges de déploiement/environnement qui surviennent lorsque vous lancez un processus pour la première fois sur un ordinateur et qu'il tente de configurer IE7/8 pour la première fois. Cependant, si vous avez une solution pour désactiver tous les installateurs IE sur chaque machine, j'aimerais l'entendre.
Revenons à ma question initiale. Je parviens à obtenir le comportement exact d'imitation d'IE que je veux* depuis l'invite de commandes en utilisant runas
(grâce à https://serverfault.com/questions/70376/runas-domain-account-still-asks-for-password):
c:\> runas /noprofile /netonly /user:MyDomain\MyUser iexplore.exe
*note: Je ne peux pas utiliser runas
pour notre application WPF pour de nombreuses raisons, mais le résultat final est ce que je veux.
En tout cas, j'aimerais avoir le code équivalent en C# qui exécute un runas /noprofile /netonly iexplore.exe
.
J'en suis à mi-chemin avec P/Invoke sur CreateProcessWithLogonW
. Voici ce que j'ai:
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);
Cela lance avec succès Internet Explorer, mais ne semble pas imiter l'utilisateur du tout. Je parviens à imiter l'utilisateur via la commande runas, donc je suis sûr à 98% que l'échec de l'authentification n'est pas un paramètre IE/zone/mot de passe/IIS, c'est juste quelque chose que je ne fais pas correctement dans mon appel à CreateProcessWithLogonW()
.
Une chose que j'ai remarquée est que la commande runas /netonly
ne fonctionne que si j'ajoute l'option /noprofile
, ce qui me pose problème. Je ne sais pas du tout comment définir l'équivalent de cette option via P/Invoke en C#.
Je suis reconnaissant pour toute aide avec l'une ou l'autre solution (résoudre le problème "IE lance un assistant lorsque je le lance pour la première fois" ou trouver l'option P/Invoke bizarre que je manque).