我正在尝试从我们的 WPF 应用程序中以另一个用户身份启动 Internet Explorer,以便当我们的用户访问(内部)网站时,他们会通过集成 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 应用程序来说,原因有很多,但是最终结果就是我想要的。
不管怎样,我想要 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
开关,这是困扰我的事情。我不知道如何通过 C# 中的 P/Invoke 设置此开关的等效项。
对于任一解决方案(解决“IE 第一次启动时运行向导”,或找到我缺少的怪异 P/Invoke 设置),我们都表示感谢。