Я пытаюсь в течение пары недель запускать не-поднятый веб-браузер с повышенным процессом, я пробовал разные вещи, дублируя проводник токена, используя WinSafer Apis 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;
}
}
Этот метод работает, и браузер действительно запущен, не возвышенный и я смог подтвердить это, проверив столбец Elevated в диспетчере задач Windows 8.
Единственный нюанс здесь заключается в том, что браузер не запускается как самое верхнее окно, оно работает в фоновом режиме, и я думаю, что это связано с тем, что его запускают через планировщик задач.
Это вызывает у меня проблемы, особенно с современными браузерами, поскольку Windows не переключается на них при запуске страницы. Я вижу, что страница была успешно запущена в Chrome, например, во время работы в режиме Windows 8, но тот факт, что она не переключается в браузер, просто бросает вызов всей цели этого обходного пути.
Я думал об использовании SetForegroundWindow
, но, к сожалению, используя URL-адрес, подобный приведенному выше примеру или через explorer.exe, Process.Start возвращает null
.
Мне было интересно, может ли кто-нибудь помочь мне исправить это и запустить браузер на переднем плане.
С уважением