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