Что использовать для создания инсталлятора на Delphi 7? [закрытый]
(Примечание: добавлено "важное редактирование" ниже, чтобы в основном повторно задать этот вопрос другим способом)
Я знаю, что существует много различных пакетов, которые можно поместить в приложение delphi для установки программного обеспечения. Мне не нужно ничего необычного, мне просто нужна возможность выполнять некоторые основные процедуры установки, такие как правильная установка/замена DLL. я могу сделать большую часть установки вручную, например, копирование файлов, сохранение настроек реестра и т. д. Мне просто нужно все, что угодно. требуется, чтобы мой установщик правильно зарегистрировал новое программное обеспечение в Windows (или обновленное программное обеспечение).
Было бы также полезно, если бы он мог, например, проверить, используется ли файл в данный момент, прежде чем пытаться заменить его. Ничего визуального не требуется, должен быть какой-то простой невизуальный компонент, который может обрабатывать эти общие процедуры. И он также должен быть свободным с открытым исходным кодом, если это возможно. Я не хочу распространять загрузку DLL или других сторонних файлов с помощью моего установщик.
Есть хорошие предложения? Пожалуйста, не отвечайте с помощью какой-либо огромной сложной системы установки фантазии. Это просто должно быть что-то простое, чтобы использовать непосредственно в Delphi. Это даже не обязательно должен быть компонент, даже просто блок или библиотека блоков с некоторыми функциями или такими, чтобы помочь автоматизировать эти общие биты и части установки.
Добавлено Примечание: у меня уже есть программа установки, сделанная в delphi-7, но я хотел бы что-то добавить в свой проект, который включает в себя любой тип помощь с наиболее распространенными частями установки программного обеспечения.
ВАЖНОЕ РЕДАКТИРОВАНИЕ:
Мой подход в постановке этого вопроса я считаю неправильным. Позвольте мне еще раз остановиться на этом вопросе...
У нашей компании уже есть простая утилита обновления. На самом деле, это не Программа установки, а программа обновления. он просто заменяет несколько исполняемых файлов, выполняет инструкции SQL (MSSQL server), записывает некоторые записи реестра и т. д...
Вот с какими проблемами я сталкиваюсь. с тем, как эта программа в настоящее время работает:
- при попытке заменить DLL, DLL может быть в использовании, и поэтому 90% времени не удается заменить DLL. Мне нужно что-то, что может проверить, используется ли DLL, и (если возможно) либо принудительно заменить DLL в любом случае, либо сказать Windows, чтобы заменить DLL при следующем перезапуске.
- имя EXE - файла ' Setup.exe', который Windows 7 автоматически распознает его как установщик (и думает, что он не смог установить). Я знаю есть обходные пути для этого, на самом деле, я видел вопрос здесь в stackoverflow недавно для этого конкретного случая. Я хотел бы посмотреть, есть ли уже что-то готовое с тем, что я получаю, что может позаботиться об этом, вместо того, чтобы я делал работу вручную. Это серверно-клиентская система, с которой я работаю. Если установка происходит на сервере, то также необходимо обновить (заменить) служебный EXE. Я знаю, как запустить / остановить сервис, но у меня есть много трудностей в ожидании сервиса чтобы остановить, затем замените файл, а затем запустите его снова. Я хотел бы посмотреть, можно ли это автоматизировать.
- выполнение большого SQL-скрипта (я имею в виду более 25 000 строк в этом скрипте) - это ад, и он не работает в половине случаев. Он включает в себя множество примеров "GO", которые не могут быть распознаны стандартными компонентами, такими как ADO. Я могу использовать пакетный файл, чтобы выполнить это, но это становится немного грязнее, чем мне удобно. Должен быть способ выполнить такой сценарий без использования пакетных файлов - особенно читая результат и пытаясь определить, были ли какие-либо ошибки в обновлении.
- это средство обновления также собирается установить другую стороннюю установку, в частностидрайверы собственного клиента SQL . Я хотел бы что-то, что уже готово для запуска другого установщика и ждать результата его (успеха или неудачи). Если это не удастся, мне нужно знать, чтобы продолжить обновление по-другому.
Я могу понять, как трудно понять то, о чем я прошу. для. Мне не нужно решение, которое может быть использовано для чего-либо и все брошено на него. Это для этой программы, ничего больше. Я знаю, что, вероятно, нет ни одного решения, чтобы покрыть все вышесказанное, но любая помощь была бы отличной.
3 ответа:
БиблиотекаJCL включает в себя множество низкоуровневых функций Windows, которые вам необходимы. Почти все, что можно сделать через Windows API, доступно в JCL.
Обратитесь к предыдущему вопросу о том, что вам нужно сделать, чтобы предотвратить сообщение "Эта программа, возможно, установлена неправильно".
В прошлом я написал сценарий аналогичного средства обновления баз данных, который включал множество операторов Go для базы данных MS SQL. Я использовал сценарий VB. Это не может быть огромным улучшение по сравнению с тем, что вы имеете сейчас, но оно включало в себя управление потоком и ловушку ошибок. Вы можете ссылаться на Windows Script Host в Delphi, но мой главный смысл заключается в том, чтобы выяснить, какие интерфейсы предоставляются вашей СУБД и использовать их.
Вот совет относительно DLL. Не помещайте их в системную папку Windows. Поместите их в ту же папку, что и исполняемый файл. Это не позволяет другим людям делиться вашими библиотеками DLL. Таким образом, когда ваша программа выключена, библиотеки DLL не загружаются, и вы можете заменить их. Если вы используете общие системные библиотеки DLL, то нет никакого обходного пути для перезагрузки.
Если это обновление предназначено для общественности, не забудьте подписать его и поместить в манифест приложения, чтобы пользователи имели хороший опыт.
Я рекомендую решать по одной проблеме за раз, и если ваше приложение не приветствует тестовые модули, напишите небольшую программу для тестирования каждого решения.
Кроме этого, я говорю, что нужно войти по локоть вглубь и начать писать код.
Хотя это не компонент, я все равно публикую это. (Попытка выполнить работу установщика вручную, когда есть отличные альтернативы, является пустой тратой вашего времени, ИМО, но не стесняйтесь голосовать за этот ответ, если вы считаете его неприемлемым.)
InnoSetup очень хорошо сделан, и (бонус) написан на Delphi и имеет доступный источник. Он делает все, что вы можете пожелать в установщике (кроме create .msi-файлы, которые требуются некоторым администраторам крупных сетей - это не повлияет на вас, поскольку вы готовы написать большую часть кода установки самостоятельно).
Вы захотите получить графический интерфейс IsTool (доступный на странице загрузки), что значительно упростит настройку сценариев установки.
Еще один бонус: вы можете расширить его, используя его функциональность Pascal Scripting.
Вот некоторые ответы на ваш большой список вопросов:
При попытке заменить DLL, DLL может быть в использовании, и поэтому 90% времени не удается заменить DLL. Мне нужно что-то, что может проверить, используется ли DLL и (если это возможно) либо принудительно заменить DLL в любом случае, или сказать Windows, чтобы заменить DLL при следующем перезапуске.
Вызов
MoveFileEx
прохождениеMOVEFILE_DELAY_UNTIL_REBOOT
.Имя EXE - файла ' Setup.exe ' который Windows 7 автоматически распознает его как установщик (и думает, что он не был установлен). Я знаю, что есть обходные пути для этого, на самом деле, я видел вопрос здесь в stackoverflow недавно для этого конкретного случая. Я хотел бы посмотреть, есть ли уже что-то готовое с тем, что я получаю, что может позаботиться об этом, вместо того, чтобы я делал работу вручную.
Добавьте манифест приложения в программу установки.программа exe. Это действительно обсуждалось здесь недавно: Как заставить мое установочное приложение вести себя правильно с окнами?
Это серверная / клиентская система, с которой я работаю. Если установка происходит на сервере, то также необходимо обновить (заменить) служебный EXE. Я знаю, как запускать / останавливать службы, но у меня есть много трудностей в ожидании остановки службы, затем замените файл, а затем запустите его снова. Я хотел бы посмотреть, можно ли это автоматизировать.
Все стандартные способы, которые я знаю, чтобы остановить службу, ждут, пока она не остановится.
Я считаю эти пункты слишком общими, чтобы давать по ним советы.Выполнение большого SQL-скрипта (я имею в виду более 25 000 строк в этом скрипте) - это ад, и он не работает в половине случаев. Он включает в себя множество примеров "GO", которые не могут быть распознаны стандартными компонентами, такими как ADO. Я могу использовать пакетный файл, чтобы выполнить это, но это становится немного грязнее, чем мне удобно. Должен быть способ выполнить такой сценарий без использования пакетных файлов-особенно чтение результата и попытка определить, были ли какие-либо ошибки в обновлении.
Это средство обновления также собирается установить другую стороннюю установку, в частности драйверы собственного клиента SQL. Я хотел бы что-то, что уже готово для запуска другого установщика и ждать результата его (успеха или неудачи). Если это не удастся, мне нужно знать, чтобы продолжить обновление по-другому.
Все эти проблемы были бы тривиальными с помощью хорошей сторонней программы установки, такой как Помощи innosetup. Я не могу понять, почему вы не хотите воспользоваться такой полезной помощью.