如何以另一个用户la / netonly启动Internet Explorer进程?

我正在尝试从我们的WPF应用程序启动Internet Explorer作为另一个用户,这样当我们的用户访问(内部)网站时,他们通过集成Windows身份validation进行静默身份validation。

我们不希望将iexplore.exe作为其他用户启动,因为在计算机上首次启动进程时会出现奇怪的部署/环境问题,并且它首次尝试设置IE7 / 8。 但是,如果你有一个如何在每台机器上静音每个IE安装程序的解决方案,我很乐意听到它。

回到我想要的问题。 我可以使用runas从命令提示符中获取我想要的IE模拟行为*(感谢https://serverfault.com/questions/70376/runas-domain-account-still-asks-for-password ):

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

*注意:由于很多原因,我不能在我们的WPF应用程序中使用runas ,但最终结果是我想要的。

无论如何,我想要运行runas /noprofile /netonly iexplore.exe的C#等效代码。

我在CreateProcessWithLogonW P / Invoke中途。 这就是我所拥有的:

 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%确定validation失败不是IE /区域/密码/ IIS设置,这只是我在调用CreateProcessWithLogonW()做的CreateProcessWithLogonW()

我注意到的一件事是runas /netonly命令只有在我添加/noprofile开关时才有效, /noprofile/noprofile事情。 我不知道如何在C#中通过P / Invoke设置这个开关的等价物。

任何解决方案都可以获得帮助(解决“我第一次启动它时IE运行向导”,或者找到我缺少的怪异P / Invoke设置)。

好的,我非常亲密。 神奇的解决方法是在iexplore.exe调用中添加-noframemerging ,其中……老实说,我不确定它是做什么的,它使用了“过程框架”这个词很棒,也许对你来说意味着什么。

无论如何,这似乎已得到解决。

 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); 

CreateProcessWithLogonW要求必须允许指定的用户帐户以交互方式登录。 这可能是个问题吗? 如果可行 ,请尝试使用CreateProcessAsUser函数 。