2015-07-14 38 views
5

công ty của tôi đang sử dụng Sharepoint và ADFS. Tuy nhiên, đối với việc sử dụng WebDav, chúng tôi cần người dùng nhận được một số mã thông báo mà họ chỉ nhận được bằng cách mở Internet Explorer và điều hướng đến hai trang web. Tuy nhiên, họ sẽ mất mã thông báo sau mỗi 30 phút, do đó, nó phải là một nhiệm vụ lặp lại.Khởi động Internet Explorer ẩn

Bây giờ công việc của tôi là:

  • mở 2 trang web với IE
  • mỗi 30 phút
  • Đừng làm phiền người dùng

giải pháp hiện tại của tôi là "ôn hòa" làm việc nhưng tôi không thực sự hài lòng với nó. Tôi chỉ có VSExpress để không có Dịch vụ.

Tôi có Biểu mẫu Windows có độ mờ tối đa được hiển thị tối thiểu. Tôi có một GPO sao chép tệp EXE vào máy tính và sau đó tạo một công việc theo thời gian bắt đầu mỗi 30 phút sau khi đăng nhập. Tuy nhiên nó không thực sự hoạt động, mọi người vẫn gặp sự cố khi truy cập webdav nếu họ không chạy EXE theo cách thủ công. . Ngoài ra bất cứ khi nào EXE đang chạy ứng dụng hiện tại của người dùng đang làm việc trong mất tập trung mà là kinda khó chịu khi bạn đang gõ một cái gì đó và phải bấm trở lại trong mã hiện tại của tôi là tìm kiếm như thế này:

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

Tuy nhiên, Tôi cảm thấy có một cách thanh lịch hơn để làm điều này. Tôi nghe nói là cách duy nhất để mở một IE ẩn là thông qua

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

Nhưng với điều này tôi dựa vào các khóa registry mà không phải tất cả các khách hàng có.

Bạn có thể giúp tôi mở IE một cách đáng tin cậy và có thể có một số mẹo về cách tôi nên đặt nhiệm vụ định kỳ chỉ bắt đầu sau mỗi 30 phút (vì tôi nghĩ nó không hoạt động chính xác).

Cảm ơn mọi người trước.

EDIT:

Nhờ https://stackoverflow.com/users/5065008/daniel-waghorn bây giờ tôi thay thế các bit opensite với:

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

Cảm ơn một lần nữa!

Trả lời

2

Bạn có thể sử dụng ProcessStartInfo để tạo ra một thể hiện mới của 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); 

Bạn có thể sử dụng Environment.SpecialFolder.ProgramFiles để lấy đường dẫn thư mục Tệp Chương trình của người dùng nếu bạn không muốn đồng de it.

Tôi phải chỉ ra rằng startInfo.WindowStyle sẽ khởi động Internet Explorer ẩn mặc dù nếu tại bất kỳ thời điểm nào IE quyết định thay đổi giá trị đó vì bất kỳ lý do nào nó có thể hiển thị.

Lý tưởng nhất là nếu bạn không bị ràng buộc với việc sử dụng Internet Explorer để nhận mã thông báo, một giải pháp thay thế khác là sử dụng mã trên nhưng nhắm mục tiêu cURL hoặc tương tự. Với điều này nó sẽ chạy trong dòng lệnh mà bạn có thể đảm bảo không hiển thị hoặc lấy cắp tiêu điểm với startInfo.CreateNoWindow.

+0

Đây là kinda những gì tôi đang tìm kiếm, tuy nhiên tôi vẫn gặp rắc rối 'startInfo.FileName = @"% ProgramFiles% \ Internet Explorer \ iexplore.exe "; ' Anh ấy đang tạo nó cho ' "% ProgramFiles% \\ Internet Explorer \\ iexplore.exe" ' Nhưng anh không thể tìm thấy tệp. Mặc dù '@" C: \ Program Files \ Internet Explorer \ iexplore.exe "' hoạt động ... – Asharon

+1

Xin lỗi có vẻ như là 'ProcessStartInfo' không phân tích cú pháp các biến môi trường một cách chính xác do đó tại sao nó không hoạt động nhưng hoạt động với phiên bản của bạn. Bạn có thể sử dụng 'Environment.SpecialFolder.ProgramFiles' và nối nó vào' FileName' của bạn để lấy thư mục Program Files của người dùng nếu bạn muốn. –

+0

'private void openProc (chuỗi trang web) { 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); } ' Hoạt động như một sự quyến rũ, cảm ơn bạn một lần nữa! – Asharon

Các vấn đề liên quan