Использование CreateProcessAsUser для запуска URL
Недавно я столкнулся с проблемой, когда мне нужно открыть веб-страницу из приложения с повышенными правами. Мне нужно, чтобы браузер был открыт без повышений, поэтому я оглянулся и нашел это решение
Это определенно решит мою проблему за исключением того, что CreateProcessAsUser
не принимает URI в качестве имени файла, выполнение завершится неудачно с сообщением об ошибке "Неверный синтаксис имени файла, имени каталога или метки тома"
Может кто-нибудь сказать мне, если есть способ запустить веб-сайт через CreateProcessAsUser или есть аналогичный API, который выполняет эту работу. Обратите внимание, что мое реальное приложение всегда повышено, и поэтому я не могу использовать обычные Process.Start()
, CreateProcess()
или же ShellExecute()
2 ответа
Есть два разных семейства функций, которые вам нужно будет использовать для выполнения этой задачи:
CreateProcess
и связанные функции. Они могут быть использованы для запуска нового процесса. Вы должны указать имя файла исполняемого образа.ShellExecute
и друзья. Они будут применять глаголы к файлам, используя правила оболочки для связи классов файлов с исполняемыми файлами.
Чтобы открыть URI, вам нужно использовать один из ShellExecute
семьи. И для того, чтобы выполнять роль обычного пользователя из вашего повышенного процесса, вам нужно использовать один из CreateProcess
семьи.
Вы не можете удовлетворить оба ваших требования с помощью одной функции. Поэтому ваше решение заключается в использовании одного из CreateProcessXXX
функции для создания процесса, который запускается как обычный пользователь. Этот процесс в свою очередь вызовет ShellExecuteXXX
, Вы передадите URI в качестве аргументов командной строки CreateProcessXXX
,
Поэтому вам нужно либо создать отдельный исполняемый файл в качестве стандартного пользовательского модуля запуска. Или повторно используйте существующий исполняемый файл, но переключите его в режим запуска в зависимости от аргументов, которые вы передаете.
я использовалCreateProcessAsUser()
с командной строкой, напримерcmd /c start myurl:
, то нет необходимости создавать еще один исполняемый файл только для вызова выполнения оболочки.