2013-04-24 4 views
3

나는 상승 된 프로세스에서 상승되지 않은 웹 브라우저를 실행하기 위해 몇 주 동안 노력 해왔다. 탐색기를 복제하면서 여러 가지 시도를했다. 토큰, WinSafer API mentioned here 및 모든 다른 기술을 사용하여 실패했습니다. 마지막으로 작업 스케줄러를 사용하여 응용 프로그램을 실행하라는 Microsoft의 제안을 사용하기로 결정했습니다.상승 된 프로세스에서 상승되지 않은 브라우저에서 웹 페이지 열기 C#

Task Scheduler Managed Wrapper을 사용했는데 처음에는 explorer.exe를 실행하고 URL을 명령으로 전달했지만 작동하지 않아 Process.Start를 사용하여 사이트를 시작하는 더미 실행 파일을 만들었습니다. 여기

내가 작업을 만드는 방법은 다음과 같습니다

public static void LaunchWin8BrowserThroughTaskScheduler(string sURL) 
     { 
      String RunAsUserExecPath = AppDomain.CurrentDomain.BaseDirectory + "URLLaunch.exe"; 

      String Command = string.Format("-w \"{0}\"", sURL); 

      using (TaskService ts = new TaskService()) 
      { 
       TaskDefinition td = ts.NewTask(); 
       td.RegistrationInfo.Description = "URL Launch"; 
       td.Principal.LogonType = TaskLogonType.InteractiveToken; 
       TimeTrigger trigger = new TimeTrigger(DateTime.Now.AddSeconds(2)) 
              { 
               Enabled = true, 
               EndBoundary = DateTime.Now.AddSeconds(10) 
              }; 


       td.Triggers.Add(trigger); 

       td.Actions.Add(new ExecAction(RunAsUserExecPath, Command, null)); 
       td.Settings.StartWhenAvailable = true; 
       //Delete the task after 30 secs 
       td.Settings.DeleteExpiredTaskAfter = new TimeSpan(0,0,0,30); 
       ts.RootFolder.RegisterTaskDefinition("URL Launch", td, TaskCreation.CreateOrUpdate, null, null, TaskLogonType.InteractiveToken); 

      } 

    } 

을이 내 더미 실행 파일의 코드입니다 :

static void Main(string[] args) 
     { 
      if(args.Length<=1) 
       return; 

      string sCmd = args[0]; 
      string sArg = args[1]; 

      if(string.IsNullOrEmpty(sCmd)||string.IsNullOrEmpty(sArg)) 
       return; 

      switch (sCmd) 
      { 
       case "-w": 
        { 
         Process prs = Process.Start(sArg);       
        } 
        break; 
      } 


     } 

이 방법이 작동하고 브라우저가 실제로 비 상승 시작됩니다 Windows 8의 작업 관리자에서 Elevated 열을 확인하여 확인할 수있었습니다.

유일한 뉘앙스는 브라우저가 맨 위 창으로 시작되지 않고 백그라운드에서 실행 중이며 작업 스케줄러를 통해 실행된다는 사실과 관련이 있다고 생각합니다.

이것은 현대 UI 브라우저에서 특히 페이지가 시작될 때 Windows로 전환하지 않기 때문에 문제가 발생합니다. 예를 들어 Windows 8 모드에서 실행 중일 때 Chrome에서 페이지가 성공적으로 실행되었음을 알 수 있지만 브라우저로 전환하지 않는다는 사실은이 대안의 전체 목적을 무시한 것입니다.

SetForegroundWindow을 사용하려고했지만 위의 예제와 같은 URL을 슬프게 실행하거나 explorer.exe를 통해 Process.Start가 null을 반환합니다.

누군가가 이것을 해결하고 전경에서 브라우저를 실행할 수 있는지 궁금합니다.

안부

답변

1

난 아주 단순한 방법으로 문제를 해결 할 수있었습니다.

는 그냥 TempFolder 같은 곳의 바로 가기 파일을 작성하고 explorer.exe를 너무 좋아를 통해 실행합니다

public static void GoURL(string url) 
{ 
string sysPath = Environment.GetFolderPath(Environment.SpecialFolder.System); 
       string ExplorerPath = Path.Combine(Directory.GetParent(sysPath).FullName, 
                 "explorer.exe"); 
       string TempDir = Environment.GetFolderPath(Environment.SpecialFolder.InternetCache); 
       string shortcutPath = Path.Combine(TempDir, "Mylink.url"); 
       urlShortcutToTemp(url, shortcutPath); 
       System.Diagnostics.Process.Start(ExplorerPath, shortcutPath); 
} 

private static void urlShortcutToTemp(string linkUrl, string shortcutPath) 
     { 
      using (StreamWriter writer = new StreamWriter(shortcutPath)) 
      { 
       writer.WriteLine("[InternetShortcut]"); 
       writer.WriteLine("URL=" + linkUrl); 
       writer.Flush(); 
      } 
     } 

같은 솔루션은 LNK 바로 가기로 실행 파일에 적용 할 수 있습니다.