Microsoft рекомендовала мне, когда я говорил с ними, написать второе приложение, которое, по вашему мнению, требует административных привилегий. Это приложение используется для развертывания файла из безопасного места (например, каталога программных данных пользователя) в каталог программных файлов (обратите внимание, что если ваша DLL не подписана, то это огромная дыра в безопасности, поскольку вирус / злонамеренный пользователь может манипулировать файл перед вызовом вашей функции).
Ваше неадминистративное приложение может вызвать это приложение, которое вызовет UAC. Людям, которые понимают UAC, все равно, и они с радостью нажмут на ваше приложение. Те, кто ненавидят это, выключат это. Вызов для запуска нового процесса (который требовал прав администратора) вызовет исключение win32, если пользователь отменяет диалоговое окно UAC, так что будьте осторожны, чтобы его перехватить.
Проблема в Vista заключается в том, что она пытается помочь вам, виртуализируя каталог программных файлов, если вы не являетесь администратором. По замыслу, вы НЕ можете писать в каталог программных файлов, если вы не являетесь администратором.
Другой вариант - создать все ваши «обновления» в виде обновлений MSI. Таким образом, установщик Windows будет запускать UAC для вас, и вы можете предоставить логотип для вашего программного обеспечения и т. Д.
Вариант 3 - использовать развертывание clickonce, которое позволит вам автоматически обновлять вашу программу без UAC, но вы живете в изолированной программной среде в системе пользователей, которая может не работать с текущим дизайном вашего приложения.