Установщик NSIS просит изменить компьютер

У меня есть программа, которая распаковывается в каталог TEMP, запускается, а затем удаляет себя из каталога TEMP. Когда однофайловый исполняемый файл, который я сгенерировал с помощью NSIS, пытается запуститься, UAC спрашивает: «Вы хотите разрешить следующей программе неизвестного издателя модифицировать ваш компьютер?»

Чтобы уточнить: установщик распаковывает только в каталог TEMP, а содержащаяся в нем программа не запускает UAC. Я думаю, это связано с чем-то, что делает NSIS, но я не могу понять, что и как это остановить. Я удалил почти все строки своего скрипта NSIS, и он все еще злит UAC.

Если это имеет значение, я использую py2exe на python2.5 в Windows 7 с библиотеками pymunk и pygame. (Но опять же, он запускает UAC только при запуске через NSIS.)

Как мне сделать так, чтобы он не запускал то, о чем UAC воюет? Нужен ли мне ключ подписи?


person Nick ODell    schedule 04.12.2010    source источник


Ответы (2)


Пользователь RequestExecutionLevel

Это происходит потому, что NSIS (ошибочно) определяется Windows как установщик, требующий прав администратора. MS добавила это обнаружение, даже не спрашивая разработчиков NSIS!

Возможно, вы захотите использовать $pluginsdir, он автоматически удаляется nsis:

Section
InitPluginsDir
SetOutPath $pluginsdir
File myapp.exe
ExecWait '"$pluginsdir\myapp.exe"'
SetOutPath $temp ;make sure pluginsdir is not locked
SectionEnd
person Anders    schedule 04.12.2010
comment
Вау, спасибо! Не тот ответ, который я искал, но stackoverflow всегда учит меня чему-то новому. - person Nick ODell; 05.12.2010

В Windows есть эвристика «обнаружения установщика». Вы можете подавить их, добавив манифест, либо встроенный в exe, либо сидящий рядом с ним, называемый what.exe.manifest, в котором говорится: «Мне не нужно повышать». Как запретить Vista требовать повышения прав в patch.exe? — это первый из многих найденных мной вопросов, которые касаются этого.

Эвристика обнаружения установщика почти полностью основана на имени файла, поэтому, если по какой-то причине вы не хотите использовать манифест, попробуйте переименовать файл, чтобы не включать строки setup, update, patch и тому подобное.

person Kate Gregory    schedule 04.12.2010
comment
Имя — это только его часть, они также проверяют название приложения/компании и даже проверяют подпись. - person Anders; 05.12.2010