Ответ 1
Вам просто нужно пометить свой автообновление как требующий повышенных привилегий в вашем манифесте приложения.
Тем не менее, вы, возможно, захотите рассмотреть возможность установки там, где у пользователя есть права на запись.
У меня есть механизм "автоматического обновления", который много лет работает под Windows XP, который выходит из строя под Windows 7, потому что запрос пользователю (который никогда не существовал под Windows XP), чтобы предоставить разрешение программы для запуска с права администратора не отображаются.
Программа win32 (написанная в Borland Delphi) использует LogonUser() и ImpersonateLoggedOnUser() для олицетворения пользователя (локальная учетная запись с правами администратора), чтобы он мог заменить выбранные файлы в папке Program Files.
Если я вручную подключился к Windows 7 с помощью этой учетной записи пользователя, а затем попытаюсь удалить файл в папке Program Files, то в Windows 7 появится мое разрешение разрешить программе продолжить работу - если я дам ему разрешение, файл будет удален, если Я запрещаю разрешение "Доступ запрещен", и удаление не разрешено.
При попытке выполнить то же самое, что описано выше, "access denied" - это результат без каких-либо подсказок пользователю.
Я вижу в подобном вопросе herabouts (относительно создания временных файлов (где основная направленность полученных ответов вполне справедливо "не делайте этого" ), что такое приглашение может быть поднято "в коде", но я не видит, где этот метод действительно объясняется.
Вам просто нужно пометить свой автообновление как требующий повышенных привилегий в вашем манифесте приложения.
Тем не менее, вы, возможно, захотите рассмотреть возможность установки там, где у пользователя есть права на запись.
Вы, похоже, спрашиваете, как выполнить код повышенного уровня. Есть несколько ответов на вопрос ниже, который содержит ссылки на информацию, необходимую для вызова функциональности с повышенным:
Хорошо прошло два года, мои клиенты наконец-то приняли Windows 7, и я, наконец, обернулся, чтобы обойти проблему, которую я пытался решить (временно лишив достаточных прав для замены исполняемых файлов в Program Files под Windows 7), заменив мои собственный инсталлятор с установщиком Inno Setup (включающий дополнительную логику, перенесенную с моего установщика с использованием Pascal Scripting). Inno Set обрабатывает все проблемы с разрешениями - ура.