나는 상승 된 프로세스에서 상승되지 않은 웹 브라우저를 실행하기 위해 몇 주 동안 노력 해왔다. 탐색기를 복제하면서 여러 가지 시도를했다. 토큰, 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
을 반환합니다.
누군가가 이것을 해결하고 전경에서 브라우저를 실행할 수 있는지 궁금합니다.
안부