启动隐藏的Internet Explorer

我的公司正在使用Sharepoint和ADFS。 但是,对于WebDav的使用,我们需要用户通过打开Internet Explorer并导航到两个站点来获取一些令牌。 然而,他们将每隔约30分钟丢失令牌,因此它必须是一个经常性的任务。

所以现在我的工作是:

  • 用IE打开2个网站
  • 每30分钟一次
  • 不要惹恼用户

我目前的解决方案是“有点”工作,但我并不满意。 我只有VSExpress所以没有服务。

我有一个最小化的最大不透明度可见假Windows窗体。 我有一个GPO,它将EXE文件复制到计算机,然后创建一个定时作业,在登录后每30分钟启动一次。 然而,如果他们没有手动运行EXE,人们仍然无法访问webdav。 此外,每当EXE运行当前应用程序时,用户正在失去焦点,当您输入内容并且必须再次单击时,这有点烦人。我当前的代码如下所示:

private void Form1_Load(object sender, EventArgs e) { MainMethod(); } private void MainMethod() { RegistryKey root = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Classes\InternetExplorer.ApplicationMedium\CLSID", false); if (root!=null) { opensite(); Application.Exit(); } } private void opensite() { try { SHDocVw.InternetExplorer _ie1 = (SHDocVw.InternetExplorer)Activator.CreateInstance(Type.GetTypeFromProgID("InternetExplorer.ApplicationMedium")); SHDocVw.InternetExplorer _ie2 = (SHDocVw.InternetExplorer)Activator.CreateInstance(Type.GetTypeFromProgID("InternetExplorer.ApplicationMedium")); _ie1.Visible = false; _ie2.Visible = false; _ie1.Navigate("SITENAME1.html"); _ie2.Navigate("SITENAME2.html"); System.Threading.Thread.Sleep(10000); _ie1.Quit(); _ie2.Quit(); } catch(Exception e) { } } 

但是,我觉得有一种更优雅的方式来做到这一点。 我听说打开隐藏的IE的唯一方法是通过

(SHDocVw.InternetExplorer)Activator.CreateInstance(Type.GetTypeFromProgID("InternetExplorer.ApplicationMedium"));

但有了这个,我依赖于并非所有客户都拥有的注册表项。

你能帮助我以可靠的方式打开IE,并且可能会对如何将重复任务设置为每30分钟启动一次(因为我认为它没有正确执行atm)。

谢谢大家。

编辑:

感谢https://stackoverflow.com/users/5065008/daniel-waghorn我现在用以下内容替换了opensite位:

 private void Form1_Load(object sender, EventArgs e) { MainMethod(); } private void MainMethod() { openProc("SITE1.html"); openProc("SITE2.html"); Application.Exit(); } private void openProc(string site) { ProcessStartInfo startInfo = new ProcessStartInfo(); string ProgramFiles = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles); startInfo.FileName = ProgramFiles + @"\Internet Explorer\iexplore.exe"; startInfo.Arguments = "" + site + ""; startInfo.CreateNoWindow = true; startInfo.ErrorDialog = false; startInfo.WindowStyle = ProcessWindowStyle.Hidden; Process.Start(startInfo); } 

再次感谢!

您可以使用ProcessStartInfo创建IE的新实例:

 ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = ""C:\Program Files\Internet Explorer\iexplore.exe""; startInfo.Arguments = "" + url + ""; startInfo.CreateNoWindow = true; startInfo.ErrorDialog = false; startInfo.WindowStyle = ProcessWindowStyle.Hidden; Process.Start(startInfo); 

如果您不想对其进行硬编码,可以使用Environment.SpecialFolder.ProgramFiles来获取用户的Program Files目录路径。

我必须指出, startInfo.WindowStyle将启动Internet Explorer隐藏,但如果IE在任何时候决定改变该值,可能会显示任何原因。

理想情况下,如果您不依赖于使用Internet Explorer获取令牌,则另一种选择是使用上面的代码,但目标是cURL或类似的东西。 使用它,它将在命令行中运行,您可以保证不使用startInfo.CreateNoWindow显示或窃取焦点。

我想你会在以下链接中找到答案:

处理IE填写表单c#

在没有聚焦的情况下打开隐藏的Internet Explorer窗口?