отображать значок приложения в приглашении повышения прав UAC для запуска приложения из общего сетевого ресурса - PullRequest
11 голосов
/ 22 января 2009

Я настроил свое приложение .NET с помощью манифеста приложения для запроса прав администратора. Я также подписал сборку с помощью signtool. Все отлично работает - когда вы запускаете приложение, вы получаете приятное приглашение UAC с именем приложения и именем сертификата подписи.

Однако, , когда я запускаю приложение из общей сетевой папки , в запросе на повышение прав отображается общий исполняемый значок, а не значок моего приложения. Как сделать так, чтобы в запросе UAC вместо этого отображался значок моего приложения?

Ответы [ 3 ]

3 голосов
/ 23 мая 2011

Я, наверное, узнал.

UAC работает поверх службы, диалоговое окно, которое мы видим, находится поверх снимка рабочего стола. Служба будет просто отображать диалоговое окно, как если бы оно было на рабочем столе.

Как мы знаем, сервисы запускаются под учетной записью SYSTEM (среди прочего). Это означает, что ей нужно иметь SYSTEM, чтобы иметь права на исполняемый файл, который мы запускаем. Я назначил охрану только для себя (без системы).

Как только я дал права на SYSTEM (только для чтения!) И запустил приложение - на нем показывался значок приложения!

1 голос
/ 23 января 2009

Видимо это не что-то с .net, а с UAC.

Я воспроизвел поведение, поместив procmon из systinternals в общий сетевой ресурс, и увидел ту же разницу.

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

Вы можете попытаться сделать следующее, чтобы принудительно установить соединение в сеансе с повышенными правами:

  • запустить командную строку с повышенными привилегиями
  • чистое использование \\your-network-location\share /user:<username> <password>
  • теперь перейдите к запуску -> запустить и запустить \\your-network-location\share\procmon.exe (чтобы быть в безопасности, избегайте подключенного диска) и посмотрите, улучшается ли запрос UAC? ​​
1 голос
/ 22 января 2009

Может ли это быть связано с вопросом: Почему мое приложение .NET падает при запуске с сетевого диска?

что ваше приложение .net имеет другие права на общий сетевой ресурс, чем на локальный диск. Обновление до 3.5 SP1 обычно устраняет эту проблему. В противном случае проверьте политики для удаленного кода для .net.

Также вы можете попробовать другое не .net-приложение (например, procmon), которое требует повышения прав, чтобы поместить его в тот же каталог и посмотреть, что произойдет.

...