Como posso iniciar um processo do Internet Explorer como outro usuário, à la / netonly?
Eu estou tentando lançar o Internet Explorer como outro usuário do nosso aplicativo WPF, para que quando nossos usuários visitam o site (interno), eles silenciosamente autenticar via autenticação integrada do Windows.
Nós não queremos lançar o iexplore.exe como o outro usuário por causa dos estranhos problemas de implementação / ambiente que ocorrem quando você inicia um processo pela primeira vez em um computador e tenta configurar o IE7 / 8 pela primeira vez. Porém, se você tiver uma solução de como silenciar todos os instaladores do IE em todas as máquinas, eu adoraria ouvir isso.
De volta à minha pergunta pretendida. Eu sou capaz de obter o IE exato representando o comportamento que eu quero * do prompt de comando usandorunas
(graças ahttps://serverfault.com/questions/70376/runas-domain-account-still-asks-for-password):
c:\> runas /noprofile /netonly /user:MyDomain\MyUser iexplore.exe
* nota: não posso usarrunas
para o nosso aplicativo WPF por muitas razões, mas oresultado final é o que eu quero.
De qualquer forma, eu gostaria que o código equivalente C # que faz umrunas /noprofile /netonly iexplore.exe
.
Eu estou no meio do caminho com o P / InvokeCreateProcessWithLogonW
. Isso é o que eu tenho:
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);
Isso inicia o Internet Explorer com êxito, mas não parece representar o usuário. Eu sou capaz de representar o usuário através do comando runas, por isso tenho 98% de certeza de que a falha na autenticação não é uma configuração do IE / zona / senha / IIS, é apenas algo que não estou fazendo na minha chamada paraCreateProcessWithLogonW()
.
Uma coisa que eu notei é que orunas /netonly
comando só funciona se eu adicionar o/noprofile
interruptor, que é algo que está me enganando. Eu não tenho idéia de como definir o equivalente a esse switch via P / Invoke em C #.
Ajuda é apreciada com qualquer solução (resolvendo o "IE executa um assistente quando eu inicio na primeira vez", ou encontrar a configuração do estranho / P / Invoke eu estou ausente).