Повышение привилегий программно и как можно более удобным для пользователя - PullRequest
2 голосов
/ 02 марта 2012

Насколько я понял, невозможно повысить привилегии в запущенном процессе. Следовательно - как предложено здесь - из моего MainApp (развернутого через ClickOnce), я в настоящее время запускаю отдельный процесс (подписанный exe-файл, назовем его Foo.exe), используемый для запуска действий, требующих прав администратора: 1004 *

Process p = new Process();
p.StartInfo.FileName = "Foo.exe";
p.StartInfo.Arguments = "args...";
p.StartInfo.UseShellExecute = true;
p.StartInfo.Verb= "runas";
p.Start();
p.WaitForExit();

Теперь я хотел бы сделать эту процедуру максимально удобной для пользователя. У меня две основные проблемы.

  1. У пользователя запрашивается окно UAC, показывающее:

    Название программы: Foo
    Издатель: Наша компания
    Происхождение файла: Жесткий диск на этом компьютере
    Расположение программы:% path% +% аргументы %

    Мне нужно скрыть аргументы (есть некоторая разумная информация, которая не так важна, но показывать ее так легко - нехорошо), и, возможно, я также хотел бы изменить имя программы на MainApp, чтобы пользователь узнал имя приложения он привык.

  2. Я хотел бы сделать основную форму в Foo дочерней по отношению к основной форме в MainApp, чтобы, например, я мог легко отобразить основную форму в Foo в центре ее родителя

1 Ответ

2 голосов
/ 02 марта 2012

Я бы предложил запустить вторую копию вашего приложения с повышенными привилегиями .. затем использовать SendMessage и WM_COPYDATA (или какое-то определенное пользователем смещение выше WM_USER), чтобы отправить сообщение / сообщения новому экземпляру с указанием, что делать ( передайте эти аргументы, скажите, где сосредоточиться и т. д.). Или используйте другую форму IPC (межпроцессное взаимодействие: сообщения Windows, именованные каналы, файлы с отображением в памяти, tcp / ip и т. Д.)

Таким образом, вы можете сохранить имя приложения, подпись, местоположение программы ... все выглядит нормально для пользователя.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...