2013-02-20 2 views
2

Недавно я столкнулся с проблемой, когда мне нужно открыть веб-страницу из приложения с повышенными правами. Мне нужен браузер должен быть открыт не повышен, поэтому я посмотрел вокруг и нашел this solutionс помощью CreateProcessAsUser для запуска URL-адреса

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

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

ответ

2

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

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

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

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

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

+0

Я знаю об этом решении и надеялся на что-то еще ... будет ждать и посмотреть, сможет ли кто-нибудь придумать что-то другое –

+1

Это единственное решение, если вы не захотите повторно реализовать «ShellExecuteXXX». Многие люди делают это, тыкаясь в реестр, но они всегда ошибаются в некоторых деталях! –

Смежные вопросы