Как я могу запустить процесс Internet Explorer от имени другого пользователя, а не только?
Я пытаюсь запустить Internet Explorer в качестве другого пользователя из нашего приложения WPF, чтобы, когда наши пользователи посещают (внутренний) веб-сайт, они автоматически аутентифицируются с помощью встроенной аутентификации Windows.
Мы не хотим запускать iexplore.exe от имени другого пользователя из-за странных проблем с развертыванием / средой, которые возникают при первом запуске процесса на компьютере, когда он пытается настроить IE7 / 8 в первый раз. Хотя, если у вас есть решение, как отключить установку каждого установщика IE на каждой машине, я бы очень хотел это услышать.
Вернемся к моему заданному вопросу. Я могу получить точное поведение олицетворения IE, которое я хочу *, из командной строки, используяrunas
(благодаряhttps://serverfault.com/questions/70376/runas-domain-account-still-asks-for-password):
c:\> runas /noprofile /netonly /user:MyDomain\MyUser iexplore.exe
* примечание: я не могу использоватьrunas
для нашего приложения WPF по многим причинам, ноend result это то, что я хочу
В любом случае, мне нравится C # -эквивалентный код, которыйrunas /noprofile /netonly iexplore.exe
.
Я на полпути с P / Invoke наCreateProcessWithLogonW
, Вот что у меня есть:
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);
Это успешно запускает Internet Explorer, но, похоже, не выдает себя за пользователя вообще. Я могу выдать себя за пользователя с помощью команды runas, так что я на 98% уверен, что неудачная проверка подлинности не является настройкой IE / zone / password / IIS, это просто то, что я не правильно делаю в своем вызове вCreateProcessWithLogonW()
.
Одна вещь, которую я заметил, состоит в том, чтоrunas /netonly
Команда работает только если я добавлю/noprofile
выключатель, который что-то, что ставит меня в тупик. Я понятия не имею, как установить эквивалент этого переключателя через P / Invoke в C #.
Помощь приветствуется в любом решении (решение «IE запускает мастер, когда я запускаю его в первый раз»), или обнаружение пропавшего без вести параметра P / Invoke.