2015-07-14 25 views
5

Meine Firma benutzt Sharepoint und ADFS. Für die Verwendung von WebDav müssen die Benutzer jedoch einige Tokens erhalten, die sie nur erhalten, indem sie den Internet Explorer öffnen und zu zwei Sites navigieren. Sie verlieren jedoch alle 30 Minuten das Token, also muss es sich um eine wiederkehrende Aufgabe handeln.Versteckter Internet Explorer starten

So jetzt meine Aufgabe ist es,

  • Open 2 Webseiten mit IE
  • alle 30 Minuten
  • Stören Sie nicht den Benutzer

Meine aktuelle Lösung ist "irgendwie" Arbeiten, aber ich bin nicht wirklich zufrieden damit. Ich habe nur VSExpress also keine Dienste.

Ich habe eine minimierte maximale Deckkraft sichtbar falsche Windows Form. Ich habe ein Gruppenrichtlinienobjekt, das eine EXE-Datei auf den Computer kopiert und dann einen zeitgesteuerten Job erstellt, der alle 30 Minuten nach der Anmeldung gestartet wird. Es funktioniert jedoch nicht wirklich, die Leute haben immer noch Probleme beim Zugriff auf webdav, wenn sie die EXE nicht manuell ausführen. . Auch, wenn die EXE wird die aktuelle Anwendung läuft der Benutzer arbeitet den Fokus verliert, was ein bisschen nervig ist, wenn Sie etwas eingeben und müssen klicken Sie zurück in Meine aktuellen Code sieht wie folgt aus:

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) 
     { 
     } 
    } 

jedoch Ich fühle, dass es einen viel eleganteren Weg gibt, dies zu tun. Ich habe gehört, der einzige Weg, eine versteckte IE zu öffnen, ist über

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

Aber damit ich stützen sich auf die Registrierungsschlüssel, die nicht alle Clients haben.

Können Sie mir helfen, den IE auf eine zuverlässige Weise zu öffnen und vielleicht einige Tipps darüber haben, wie ich die wiederkehrende Aufgabe einstellen sollte, nur alle 30 Minuten zu starten (weil ich denke, dass es nicht richtig atm tut).

Vielen Dank im Voraus.

EDIT:

Dank https://stackoverflow.com/users/5065008/daniel-waghorn ich jetzt das Open Bit ersetzt mit:

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

Nochmals vielen Dank!

Antwort

2

Sie können ProcessStartInfo verwenden, um eine neue Instanz von IE zu erstellen:

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

Sie könnten Environment.SpecialFolder.ProgramFiles verwenden, um den Verzeichnispfad für den Programmordner des Benutzers abzurufen, wenn Sie keine Hard-Co-Dateien erstellen möchten de es.

Ich muss darauf hinweisen, dass startInfo.WindowStyle startet Internet Explorer versteckt, obwohl, wenn an irgendeinem Punkt IE beschließt, diesen Wert aus irgendeinem Grund ändern, die es zeigen kann.

Im Idealfall, wenn Sie nicht mit dem Internet Explorer verbunden sind, um die Token zu erhalten, wäre eine andere Alternative, den obigen Code zu verwenden, aber Ziel cURL oder etwas ähnliches. Damit wird es in der Befehlszeile ausgeführt, die Sie garantieren können, Fokus mit startInfo.CreateNoWindow nicht anzuzeigen oder zu stehlen.

+0

Dies ist ein bisschen was ich suchte, aber ich laufe immer noch in Schwierigkeiten 'startInfo.FileName = @"% ProgramFiles% \ Internet Explorer \ iexplore.exe "; ' Er macht es zu ' "% ProgramFiles% \\ Internet Explorer \\ iexplore.exe" ' Aber er kann die Datei nicht finden. ' ' @ "C: \ Programme \ Internet Explorer \ iexplore.exe" ' funktioniert ... – Asharon

+1

Sorry es sieht aus, als ob' ProcessStartInfo' die Umgebungsvariablen nicht korrekt analysiert, weshalb es nicht funktioniert funktioniert aber mit deiner Version. Sie können 'Environment.SpecialFolder.ProgramFiles' verwenden und es zu Ihrem' FileName' verketten, um den Ordner 'Programme' des Benutzers zu erhalten, wenn Sie möchten. –

+0

'private void openProc (Zeichenfolgensite) { ProcessStartInfo startInfo = new ProcessStartInfo(); Zeichenfolge ProgramFiles = Environment.GetFolderPath (Environment.SpecialFolder.ProgramFiles); startInfo.FileName = Programmdateien + @ "\ Internet Explorer \ iexplore.exe"; startInfo.Arguments = "" + Site + ""; startInfo.CreateNoWindow = true; startInfo.ErrorDialog = false; startInfo.WindowStyle = ProcessWindowStyle.Hidden; Prozess.Start (startInfo); } ' Funktioniert wie ein Charme, ich danke Ihnen noch einmal! – Asharon