【发布时间】:2012-08-21 23:35:27
【问题描述】:
我正在尝试从我们的 WPF 应用程序以另一个用户身份启动 Internet Explorer,这样当我们的用户访问(内部)网站时,他们会通过集成 Windows 身份验证静默进行身份验证。
我们不希望以其他用户身份启动 iexplore.exe,因为当您在计算机上首次启动进程并尝试设置 IE7/8 时会出现奇怪的部署/环境问题.不过,如果你有一个解决方案来让每台机器上的每个 IE 安装程序静音,我很乐意听到。
回到我的预期问题。我可以使用runas(感谢https://serverfault.com/questions/70376/runas-domain-account-still-asks-for-password)从命令提示符中获得我想要的确切IE模拟行为:
c:\> runas /noprofile /netonly /user:MyDomain\MyUser iexplore.exe
*注意:出于多种原因,我不能将runas 用于我们的 WPF 应用程序,但最终结果正是我想要的。
无论如何,我想要执行 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% 确定身份验证失败不是 IE/zone/password/IIS 设置,这只是我在调用 @ 时没有做对的事情987654329@.
我注意到的一件事是runas /netonly 命令只有在我添加/noprofile 开关时才有效,这让我很困惑。我不知道如何在 C# 中通过 P/Invoke 设置此开关的等效项。
感谢您对任一解决方案的帮助(解决“当我第一次启动 IE 时运行向导”,或者找到我缺少的怪异 P/Invoke 设置)。
【问题讨论】:
-
自从我使用 Windows 已经有一段时间了,但是为什么不让浏览器在使用该应用程序的用户下启动——我的(诚然不是在考虑而)理解是它会正常工作 - 浏览器会将登录用户的加密凭据发送到服务器,并且只有在失败时才请求身份验证。
-
哦,我明白了。用户可能是必须通过IE设置BS的新用户,对吗? (很抱歉第一次读错了)
-
这对预配置 IE 有帮助吗? symantec.com/connect/articles/…
-
考虑到奇怪(以及 IE 已经打开时发生的另一个问题),我可能只是尝试解决 IE 安装程序问题,而不是启动进程“/netonly”。
标签: c# internet-explorer winapi pinvoke ntlm