Отображать значок приложения в приглашении повышения UAC для запуска приложения из сетевого ресурса

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

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

Ответ 1

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

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

Поскольку мы знаем, что службы работают на учетной записи SYSTEM (среди немногих других). Это означает, что для SYSTEM необходимо иметь права на исполняемый файл, который мы запускаем. Я назначил безопасность себе только исключительно (лишенный СИСТЕМЫ).

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

Ответ 2

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

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

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

Ответ 3

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

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

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

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

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