используя CreateProcessAsUser для запуска URL

Недавно я столкнулся с проблемой, когда мне нужно открыть веб-страницу из приложения с повышенными правами. Мне нужно, чтобы браузер открывался без повышенных прав, поэтому я огляделся и нашел это решение

Это определенно решит мою проблему, за исключением того, что CreateProcessAsUser не принимает URI в качестве имени файла, выполнение завершится с ошибкой с сообщением об ошибке «Имя файла, имя каталога или синтаксис метки тома неверны»

Может ли кто-нибудь сказать мне, есть ли способ запустить веб-сайт через CreateProcessAsUser или есть аналогичный API, который выполняет эту работу .. Обратите внимание, что мое фактическое приложение всегда имеет повышенные права, и поэтому я не могу использовать обычные Process.Start(), CreateProcess() или ShellExecute()


person Zaid Amir    schedule 20.02.2013    source источник


Ответы (1)


Есть два разных семейства функций, которые вам нужно будет использовать для выполнения этой задачи:

  1. CreateProcess и связанные функции. Их можно использовать для запуска нового процесса. Вы должны указать имя исполняемого образа.
  2. ShellExecute и друзья. Они будут применять глаголы к файлам, используя правила оболочки для связывания классов файлов с исполняемыми файлами.

Чтобы открыть URI, вам нужно использовать один из семейства ShellExecute. А для того, чтобы работать в качестве обычного пользователя из вашего процесса с повышенными правами, вам необходимо использовать один из CreateProcess семейства.

Вы не можете удовлетворить оба ваших требования с помощью одной функции. Поэтому ваше решение состоит в том, чтобы использовать одну из CreateProcessXXX функций для создания процесса, который запускается от имени стандартного пользователя. Этот процесс, в свою очередь, вызовет ShellExecuteXXX. Вы передадите URI в качестве аргументов командной строки CreateProcessXXX.

Поэтому вам нужно будет либо создать отдельный исполняемый файл в качестве стандартной пользовательской программы запуска. Или повторно используйте существующий исполняемый файл, но переключите его в режим запуска в зависимости от аргументов, которые вы ему передаете.

person David Heffernan    schedule 20.02.2013
comment
Я знаю об этом решении и надеялся на что-то еще ... подожду и посмотрю, сможет ли кто-нибудь придумать что-то другое - person Zaid Amir; 21.02.2013
comment
Это единственное решение, если вы не хотите повторно реализовать ShellExecuteXXX. Многие люди так делают, ковыряясь в реестре, но всегда ошибаются в тех или иных деталях! - person David Heffernan; 21.02.2013