Как заставить мое приложение установщика правильно работать с Windows? - PullRequest
4 голосов
/ 27 ноября 2011

Я сделал простое установочное приложение в Delphi, ничего особенного.В основном я включаю файлы в Exe, а затем извлекаю их по указанному пользователем пути.

Однако я наткнулся на проблему, и я заметил, что это работает с ЛЮБОЙ исполняемой программой Windows, не имеет значения, если этоУстановщик или нет.

Если exe назван или содержит следующие слова в имени файла: «Установка», «Сборка», «Установка» и, возможно, другие, то ... при каждом запуске и закрытии ПриложенияВ Windows появляется диалоговое окно «Ассистент совместимости продуктов», в котором говорится, что приложение, возможно, установлено неправильно.

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

Единственная идея, которая у меня возникла в связи с этим, заключается в том, что Windows должна проверять имя файла Приложения при выполнении и в этом случае идентифицирует его как Установщик.Затем Windows должна установить флаг или что-то в системе, мой установщик должен обновить этот флаг, чтобы сообщить, что установка прошла успешно?

Windows не жалуется на это при отладке из IDE, поэтому не можетбыть связанным с кодом, это должна быть ОС - это происходит только при запуске приложения из Windows, а не из Delphi.

Вы можете легко попробовать это, либо создать приложение, либо переименовать его в Setup.exe, запустить его изатем закройте его - подождите несколько секунд, и появится диалог Ассистента совместимости продуктов.

Я не знаю, с чего начать расследование, как остановить это диалоговое окно, или где может быть параметр, чтобы сообщить Windows, что установщик былвыполнено правильно.

Благодарим вас за мысли и решения.

Ответы [ 2 ]

8 голосов
/ 27 ноября 2011

Если я правильно помню, это происходит, когда ваше приложение установки не содержит манифест приложения. Когда был введен UAC, MS ввела эвристическое обнаружение для установщиков и показывает диалоговое окно повышения прав UAC. Эвристическая проверка таких имен, как setup.exe, install.exe. Простое решение - включить манифест приложения. Если это установщик, вы, вероятно, захотите использовать настройку requireAdministrator.

Эта функция известна как обнаружение установщика и обсуждается здесь .

Для чего бы это ни стоило, я бы всегда создавал установщик с помощью специального инструмента установки, такого как InnoSetup, например.

3 голосов
/ 27 ноября 2011

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

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

Если у приложения есть файл манифеста, который включает директив запрашиваемогоExecutionLevel, то Windows не пытается Обнаружение установщика .

Любая программа, которая обнаружена как программа установки, но не добавляет реестрЗапись в разделе «Установка и удаление программ» реестра (HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall) выдаст сообщение «Возможно, эта программа установлена ​​неправильно».

...