Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 启动隐藏的Internet Explorer_C#_Internet Explorer_Scheduled Tasks_Gpo - Fatal编程技术网

C# 启动隐藏的Internet Explorer

C# 启动隐藏的Internet Explorer,c#,internet-explorer,scheduled-tasks,gpo,C#,Internet Explorer,Scheduled Tasks,Gpo,我的公司正在使用Sharepoint和ADFS。但是,对于WebDav的使用,我们需要用户获得一些令牌,这些令牌只能通过打开Internet Explorer并导航到两个站点才能获得。但是,他们每30分钟就会丢失一次令牌,因此这必须是一项重复性任务 因此,我现在的工作是: 用IE打开2个网站 每30分钟 不要打扰用户 我目前的解决方案是“有点”工作,但我不是真的很满意。 我只有VSExpress,所以没有服务 我有一个最小化的最大不透明度可见假窗口窗体。 我有一个GPO,它将一个EXE文件复

我的公司正在使用Sharepoint和ADFS。但是,对于WebDav的使用,我们需要用户获得一些令牌,这些令牌只能通过打开Internet Explorer并导航到两个站点才能获得。但是,他们每30分钟就会丢失一次令牌,因此这必须是一项重复性任务

因此,我现在的工作是:

  • 用IE打开2个网站
  • 每30分钟
  • 不要打扰用户
我目前的解决方案是“有点”工作,但我不是真的很满意。 我只有VSExpress,所以没有服务

我有一个最小化的最大不透明度可见假窗口窗体。 我有一个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分钟开始一次(因为我认为它做得不正确)

提前谢谢大家

编辑:

多亏了 我现在将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
获取用户的程序文件目录路径

我必须指出,
startInfo.WindowStyle
将启动Internet Explorer hidden,尽管IE决定出于任何原因更改该值


理想情况下,如果您不想使用Internet Explorer获取令牌,另一种选择是使用上述代码,但目标或类似的东西。有了它,它将在命令行中运行,您可以保证不会用
startInfo.CreateNoWindow

显示或窃取焦点,这是我一直在寻找的,但是我仍然遇到麻烦
startInfo.FileName=@“%ProgramFiles%\Internet Explorer\iexplore.exe”他正在将其设置为
%ProgramFiles%\\Internet Explorer\\iexplore.exe“
,但他找不到该文件。虽然
@“C:\Program Files\Internet Explorer\iexplore.exe”
可以工作…很抱歉,
ProcessStartInfo
似乎无法正确解析环境变量,因此它无法工作,但可以与您的版本一起工作。如果需要,可以使用
Environment.SpecialFolder.ProgramFiles
并将其连接到
FileName
以获取用户的程序文件文件夹。
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);}
非常有魅力,再次感谢!感谢您的回复,我会查看您提到的帖子。我希望您能找到一些有用的东西;)