Показать полную графическую версию : Авторам аддонов
jameszero, продолжу свой FAQ
16 Какие существуют правила к написанию строк в файле Run? Пример:TCx7zSFXBtn.exe -ai -! "C:\Program Files\Total Commander" Данная строка корректно работает при запуске указанного 7z SFX архива на "живой" системе и не срабатывает в аддоне при установке Windows (в файле svcpack.inf запись присутствует в неискаженном виде, проверил). Параметр "C:\Program Files\Total Commander" должен быть передан в исполняемую программу, но передается лишь его часть, а именно C:\Program . Какие правила я нарушил и как писать параметр с пробелами, в данном случае, в файле Run?
jameszero
11-10-2007, 12:59
gora
Такие эксперименты я не проводил. Затрудняюсь ответить.
Boa Soft
11-10-2007, 13:06
gora,
На сколько я помню, SVCPACK понимает только короткие имена. Попробуйте положить в svcpack
cmd и в нем уже выполнять команды.
Boa Soft, Вы имеете ввиду длину имени TCx7zSFXBtn.exe ? Так я делал его и TCxBtn.exe и с тем же результатом. Хотя у меня есть пример длинного имени которое нормально обрабатывается: UltraISO.exe /VERYSILENT, UltraISOreg.exe)
А про cmd, попробую, но не очень это красиво получается, хотя, если не найду другого пути, то... Меня интересует вопрос: почему не_обрабатываются/не_правильно_обрабатываются кавычки? Они что, не учитываются в SVCPACK !?
jameszero
11-10-2007, 14:04
Отвечаю на вопрос (http://forum.oszone.net/post-658364-22.html) в теме c аддоном Miranda IM.
Есть ряд программ, которые для установки достаточно просто скопировать в нужную директорию, создать ярлыки, добавить записи в реестр (последнее опционально)
К таким программам относится и Miranda.
В аддоне я использовал следующий inf файл
[Version]
Signature="$Windows NT$"
AdvancedINF=2.5
[Optional Components]
Uninst7
[Uninst7]
OptionDesc =%PROG_NAME%
Modes =0,1,2,3
AddReg =PROG.AddReg
ProfileItems =PROG.AddShortcut
Uninstall =mUninst.Uninstall
[DefaultInstall]
OptionDesc =%PROG_NAME%
Modes =0,1,2,3
AddReg =PROG.AddReg
ProfileItems =PROG.AddShortcut
Uninstall =mUninst.Uninstall
[Uninstall]
BeginPrompt =BeginUnInsPrompt
RunPreSetupCommands =Close.Prog:1
RunPostSetupCommands =Dir.Delete
EndPrompt =EndUnInsPrompt
DelReg =PROG.DelReg
ProfileItems =PROG.DelShortcut
[BeginUnInsPrompt]
Title=Деинсталляция %PROG_NAME%
Prompt=Вы действительно хотите удалить %PROG_NAME% и все компоненты программы?
ButtonType=YESNO
[Close.Prog]
TASKKILL /F /IM %PROG_1%
TSKILL %PROG_2%
[Dir.Delete]
rundll32.exe advpack.dll,DelNodeRunDLL32 %16422%\%PROG_DIR%
[EndUnInsPrompt]
Prompt=Программа %PROG_NAME% удалена.
[PROG.AddReg]
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%PROG_NAME%_addon","DisplayIcon",0,"%16422%\%PROG_DIR%\%PROG_1%"
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%PROG_NAME%_addon","DisplayName",,%PROG_NAME%"
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%PROG_NAME%_addon","DisplayVersion",,"v%PROG_VERS%"
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%PROG_NAME%_addon","Publisher",,"%PROG_MADE%"
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%PROG_NAME%_addon","URLInfoAbout",,"%PROG_URL%"
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%PROG_NAME%_addon","UninstallString",,"rundll32.exe advpack.dll,LaunchINFSection %17%\%PROG_INF%,Uninstall"
[PROG.DelReg]
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%PROG_NAME%_addon"
[PROG.AddShortcut]
Name =%SRTC_NAME%
CmdLine =16422,%PROG_DIR%,%PROG_1%
WorkingDir =16422,%PROG_DIR%
SubDir =%PROG_SDIR%
InfoTip =%PROG_INFO%
[PROG.DelShortcut]
Name =%SRTC_NAME%,0x00000002
SubDir =%PROG_SDIR%
[Strings]
PROG_DIR ="Miranda IM"
PROG_NAME ="Miranda IM"
SRTC_NAME ="Miranda IM"
PROG_VERS ="0.7"
PROG_MADE ="oszone.net"
PROG_URL ="http://forum.oszone.net/forum-62.html"
PROG_INF ="Uninst7.inf"
PROG_1 =miranda32.exe
PROG_2 =miranda32
PROG_SDIR =""
PROG_INFO ="Программа для общения по ICQ протоколу"
При редактировании только одной секции [String] и переименовании секции инсталляции, можно использовать этот inf для установки/удаления других аддонов. Аддоны должны быть комбинированные, т.е. сначала из sysoc срабатывает данный inf файл, а затем из SVCPACK запускается sfx архив, созданый любым доступным способом, при этом, sfx архив должен просто распаковать файлы в нужную директорию.
Создание ярлыков, внесение информации в реестр (в том числе о деинсталляции) реализовано в inf файле.
Деинсталляция перенесена из привычного для sysoc аддонов места "Установка компонентов Windows" в Установку и удаление программ"
При деинсталляции будет выдан запрос "Вы действительно хотите удалить такую то программу?",
Если программа в данный момент запущена, она будет выгружена из памяти, далее произойдёт удаление директории с программой, ярлыков, записей реестра.
По окончании деинсталляции будет сообщено "Программа такая то удалена"
Приведу пример inf-а для программы Test,
Директория установки - Program Files\Утилиты\Folder\Test
Ярлык - Пуск\Программы\Утилиты\Ярлык Test Program.lnk
[Optional Components]
Uninst8
[Uninst8]
OptionDesc =%PROG_NAME%
Modes =0,1,2,3
AddReg =PROG.AddReg
ProfileItems =PROG.AddShortcut
Uninstall =mUninst.Uninstall
<skip>
[Strings]
PROG_DIR ="Утилиты\Folder\Test"
PROG_NAME ="Test Program"
SRTC_NAME ="Ярлык Test Program"
PROG_VERS ="0.0.0.1"
PROG_MADE ="oszone.net"
PROG_URL ="http://forum.oszone.net/forum-62.html"
PROG_INF ="Uninst8.inf"
PROG_1 =test.exe
PROG_2 =test
PROG_SDIR ="Утилиты"
PROG_INFO ="Программа для примера работы inf файла"
Так же, в файлах txtsetup, dosnet, sysoc необходимо заменить все Uninst7 на Uninst8
И переименовать сам файл Uninst7.inf в Uninst8.inf.
Идея подсмотрена здесь (http://www.ryanvm.net/forum/viewtopic.php?t=4796)
Пустышку аддона Miranda прикрепил к посту. В sfx архиве реализована защита от случайного запуска.
Если возникли вопросы, спрашивайте.
Спасибо за разъяснения, но откликаясь на ваше предложение ;) задавать вопросы, спрошу:
а) переименовании секции инсталляции »А что это за число которое там используется? Оно может быть любым или зависит от чего то? Может быть оно буквой или словом?
б) sfx архив должен просто распаковать файлы в нужную директорию.
Создание ярлыков, внесение информации в реестр (в том числе о деинсталляции) реализовано в inf файле. »Если я правильно понял, то в sfx архиве все таки МОЖНО делать ярлыки и записи в реестр, но НЕ нужно т.к. все они НЕ будут удалены при деинсталляции. Я прав?
в) Если sfx архив распакует некоторые файлы/папки не основную папку программы, то деинсталлятор не будет знать об этом и, соответственно, не удалит их, удалив при этом основную папку программы. Это так?
г) Создать ярлык можно только в Пуск\Программы\... или можно и на панель быстрого запуска, или и туда и туда одновременно?
jameszero
11-10-2007, 16:37
gora,
а) секции установки, как и имена файлов могут называться произвольно, цифры, буквы - не важно. Критично только переименовывать inf файл, чтобы имя не дублировалось от аддона к аддону, а название секции можно не менять. Я всего лишь для единообразия сделал название секции и имя inf-а совпадающими.
б) ярлыки и записи в реестр можно создавать и sfx архивом, просто тогда нужно будет предусмотреть их удаление из inf
в) можно предусмотреть удаление файлов, добавив DelFiles в inf, но тогда, как и в предыдущем случае, inf становится не универсальным. Сабж больше подходит для установки простейших программ, которых не мало.
г) можно создать и несколько ярлыков, просто придётся внести больше измений в inf
На рабочем соле, например, ярлык создастся, если присвоить переменной PROG_SDIR следуюшее значение
PROG_SDIR ="..\..\Рабочий стол"
Как поместить ярлык в панель быстрого запуска, простого способа я не знаю.
Предложенный inf всего лишь шаблон и, конечно, его можно дополнять секциями удаления файлов, дерегистрации библиотек...
У меня ряд программ устанавливается из sfx архивов, а встраивать в каждый архив механизм деинсталляции трудоёмко и я сделал inf файл, который значительно облегчил задачу. Возможно, кто то ещё найдёт его полезным.
Boa Soft
12-10-2007, 01:57
jameszero, Предложенный inf всего лишь шаблон и, конечно, его можно дополнять секциями удаления файлов, дерегистрации библиотек...
У меня ряд программ устанавливается из sfx архивов, а встраивать в каждый архив механизм деинсталляции трудоёмко и я сделал inf файл, который значительно облегчил задачу. Возможно, кто то ещё найдёт его полезным. »
Для таких вещей Inno Setup очень даже рулит. Если потратить час - другой на разбор продукта, то потом можно клепать полноценные проффесионально сделанные инсталляторы за 10-20 минут!
http://www.jrsoftware.org
Бесплатное, инсталлятор можно сделать локализованным, ключик /VERYSILENT дает абсолютно тихую установку. На T12-T13 отрабатывает великолепно.
Если интересно - отвечу на вопросы (или дам для образца скрипты). Мне порой легче самому сделать инсталлятор, чем искать способ тихой установки чего-либо.
jameszero
12-10-2007, 08:43
Boa Soft
Inno Setup я использую, есть у меня и под него простейшие шабоны, наподобие этого (http://forum.oszone.net/post-635659-14.html), есть скрипты и посерьёзней. Просто, иной раз, при интеграции программы в 100Кб, упаковка в Inno Setup не целесообразна потому, что значительно увеличивает размер программы по сравнению с полезным.
К тому же, мне хотелось сделать аддон Miranda доступным для самостоятельного обновления (в виде конструктора)
Обновить sfx архив перетянув в него файлы, смогут практически все, а по Inno Setup нужно будет проводить ликбез.
Boa Soft,
А в InnoSetup есть функция чтобы абсолютно тихая установка была "по умолчанию" без ключика?
jameszero, изучив ваш шаблон для аддона, сделал свой аддон-конструктор для ТС.
Перед собой ставил задачу:
1 7z SFX архив в аддоне должен быть универсальным (с возможностью установки как а составе аддона, так и на "живую" систему).
2 Должна иметься возможность деинсталляции ТС.
3 7z SFX архив должен быть самодостаточен (не требуется ни каких дополнительных внешних файлов).
4 "Нестандартное" место установки ТС и название папки установки (c:\totalcmd).
5 Создание ярлыков на рабочий стол и панель быстрого запуска и их автоматическое удаление при деинсталляции ТС.
Полученный аддон-конструктор для ТС (проверил: работает и при установке в качестве аддона, и при установке на "живую" систему) прикрепил к посту. Если сочтете возможным, посмотрите пожалуйста и подскажите - может я где то ошибся.
jameszero
15-10-2007, 11:55
gora
У меня в предложенном варианте не отрабатывает деинсталляция. Если убрать из строки деинсталляции hidcon или прописать путь к Uninstall.bat то всё нормально.
так
C:\totalcmd\Uninstall.bat
или так
C:\totalcmd\hidcon C:\totalcmd\Uninstall.bat
Можно ещё сделать деинсталлятор средствами sfx 7z (пример установочного файла во вложении)
PS: BeginPrompt из inf-а убран намеренно?
У меня в предложенном варианте не отрабатывает деинсталляция. »Очень странно. :( У меня все отрабатывается (сделал два аддона ТС и Миранды и все в порядке). Правда я не уверен в %24%\%PROG_DIR%\hidcon Uninstall.bat. Притаскивает эта переменная с собой слеш в конце или нет!? А Вы у себя не потерли файлы Uninstall.bat и hidcon.exe внутри моего архива при проверке (понимаю, что глупость спрашиваю, но всякое бывает)?Можно ещё сделать деинсталлятор средствами sfx 7z (пример установочного файла во вложении) »Это я знаю, но хотел без дополнительного увеличения объема обойтись. Ваш вариант обязательно посмотрю.BeginPrompt из inf-а убран намеренно? »Да. Отмена деинсталяции в нем не спасала от удаления ярлыка с панели быстрого запуска. :( Вот и решил обойтись без него.
PS Вы оказались правы. Сейчас запустил на работе и деинсталляция без указанных Вами изменений не прошла. :( Буду разбираться, спасибо.
jameszero
15-10-2007, 12:40
А Вы у себя не потерли файлы Uninstall.bat и hidcon.exe внутри моего архива при проверке »Естественно. Проверял "как есть".
jameszero,
Посмотрел пример с деинсталятором (вообще идея понравилась, спасибо), но несколько вопросов:
1) Почему Uninstall копируется в %WINDIR% а не в папку программы?
2) Зачем создавать и впоследствии удалять ярлыки, с помощью 7z, если этот-же процесс все равно предусмотрен в Inf?
jameszero
16-10-2007, 09:03
vek, Почему Uninstall копируется в %WINDIR% а не в папку программы? »Просто папка с программой не удалится если из неё будет запущен файл, она будет занята процессом.
Можно копировать не в %WINDIR%, а по общей договорённости, складывать файлы Uninstall от разных аддонов, в какой то произвольной папке.
Зачем создавать и впоследствии удалять ярлыки, с помощью 7z, если этот-же процесс все равно предусмотрен в Inf? »C помощью sfx создаётся/удаляется ярлык в Quick Launch, если знаете, как это сделать из inf - поделитесь.
--
Может кому пригодится:
Cоздание/удаление ярлыка в контекстном меню "Отправить" (SendTo) с помощью inf
[Version]
Signature="$Windows NT$"
[DefaultInstall]
ProfileItems =PROG.AddShortcut
[Uninstall]
ProfileItems =PROG.DelShortcut
[PROG.AddShortcut]
Name = "Send_To_Shortcut",0x00000008,9
CmdLine = 11,,prog.exe
[PROG.DelShortcut]
Name = "Send_To_Shortcut",0x0000000A,9
Мне все таки удалось довести аддон-конструктор (не без помощи jameszero конечно ;) ), но в отличии от его варианта деисталлятор располагается и запускается в папке программы. После деинсталляции папка программы, деинсталлятор как и все файлы связанные с программой удаляются.
Результаты прикрепил к посту. Посмотрите, может кому то окажется полезным.
Я не совсем понял назначение деинсталятора, у меня например команда из реестра
HKLM,"%UNINSTALL%","UninstallString",,"rundll32.exe advpack.dll,LaunchINFSection C:\Example.inf, DefaultInstall" Прекрасно обрабатывает секцию в Inf-файле:
[Dir.Delete]
rundll32.exe advpack.dll,DelNodeRunDLL32 %24%\%PROG_DIR%
т.е. папка программы со всем содержимым удаляется!
Или это не всегда срабатывает?
vek, задачи, которые я ставил при создании аддона конструктора изложены в посте 211. Как создать ярлык на панели быстрого запуска и удалить его силами Inf-файла я не знаю. :( Знаете - подскажите.
gora
Так дело выходит только в ярлыке Quick Launch, и Uninstall.exe нужен лишь для того, чтобы его удалить? Тогда ссори, я просто никогда не ставил задачи установить ярлык в Quick Launch, но подумаю, может найду какой-то вариант.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC