2012-03-02 2 views
2

Насколько я понял, невозможно повысить привилегии в текущем процессе. Следовательно - как это было предложено here - от моего MainApp (развертывается через ClickOnce) Я в настоящее время запускает отдельный процесс (подписанная ехе давайте назовем его foo.exe) используется для выполнения действий, требующих высокого привилегии администратора:Повышающие привилегии программно и максимально удобными для пользователя

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
    Издательство: Ourcompany
    Происхождение файла: Жесткий диск на этом компьютере
    Программа Расположение:% путь% +% аргументы%

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

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

ответ

2

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

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

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

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