Показать полную графическую версию : Авторам аддонов
volk1234
09-03-2008, 21:14
кто нить помогите разобратся с uninstall
вот делал аддон - пример для инструкции
все замечательно устанавливается,
но не анинсталится.
Вернее совсем не понятно расхождение, описанного в учебнике по Inf и структура готовых аддонов.
как добавить аддон в список удаления программ понятно, но непонятны следующие вещи:
1. Почему недостаточно просто использовать DelDir? Зачем удалять файлы по одному, а затем удалять директории?
2. Строка HKLM,Software\Microsoft\Windows\CurrentVersion\Uninstall\MYProgram,"UninstallString",,"rundll32.exe advpack,LaunchINFSectionEx %17%\MY.inf,Uninstall,,64,A" обязательно должна иметь
параметр Uninstal? или допускается любое имя секции?
3. В некоторых аддонах есть другое присвоение Uninstall=SectionName, это я так понимаю больше для встроенных в программу анинсталяторов?
4. Даже если и необходимо сначало удалять файлы поименно, зачем создавать отдельные секции удаления для всех фалов, дублирующие секции копирования?
5. И естественно, почему не работает мой инф, я его уже искромсал, оставил одно удаление файлов, но они не удаляются:(
volk1234,
А почему Вы не используете:
[Uninstall]
BeginPrompt =BeginUnInsPrompt
RunPreSetupCommands =Close.Prog:1
RunPostSetupCommands =Dir.Delete
EndPrompt =EndUnInsPrompt
[BeginUnInsPrompt]
Title=Деинсталляция %PROG_NAME%
Prompt=Вы действительно хотите удалить %PROG_NAME% и все компоненты программы?
ButtonType=YESNO
[Close.Prog]
TASKKILL /F /IM %PROG_1%
[Dir.Delete]
rundll32.exe advpack.dll,DelNodeRunDLL32 %16422%\%PROG_DIR%
[EndUnInsPrompt]
Prompt=Программа %PROG_NAME% удалена.
[Strings]
PROG_NAME ="Program_Name"
PROG_DIR ="Program_Name"
PROG_1 =Program_Name.exe
volk1234
10-03-2008, 10:51
Drinko
Спасибо за отклик.
Я видел этот шаблон от jameszero.
Вообще, насчитал как минимум 3 способа uninstal через inf:
1. Который указали вы, через advpack.dll,DelNodeRunDLL32
2. Который пытаюсь отработать я через advpack,LaunchINFSectionEx %17%\program.inf,Uninstall,,64,A"
даже без deldir
3.uninstal=sectionname,
[sectionname]
uninstal.exe
без учета удаления ялыков,записей реестра и удаления используемых папок.
Просто в учебнике по Inf который указан в шапке используется именно этот(2й в моем списке) способ
Я исходил из того, что новый человек, как и я сначала захочет сделать все по инструкции, а потом начнет потрошить
аддоны и искать более сложные примеры. Я даже strings не хотел использовать, однако в процессе экспериментов решил
польностью продублировать как в учебнике по inf. Что интересно в процессе экспериментов я пытался запустиь эту строку
без инфа черз rundll32, и в итоге удаления или прибавления кавычек или запятых удаление отработала из моего инфа :)
К сожалению повторить сей результат я не смог :(
volk1234,
1 - DelDir - применять лучше для самих каталогов, при копировании и удалении файлов лучше испольщовать разные секции, т.к. иногда используется переименование файлов из формата 8.3 в LFN, обход защиты от записи файлов.
2 - в inf-файле должна быть полноценная секция uninstall
3 - необязательно - можешь сгенерить ссылку на свой uninstall.bat файл
4 - см п. 1
5 - неверное описание секции uninstall. Посмотри для примера кусок файла mplayerc.inf:
[mplayerc.Uninstall]
PreInstallCommand = UnRunCmd
DelFiles=mplayerc.Del,mplayerc.lang.del, mplayerc.data.del
Run=mplayerc.AdvInfCall
ProfileItems=mplayerc.DelItems1,mplayerc.DelItems2
RunPreSetupCommand = UnRunCmd
[mplayerc.AdvInfCall]
Commandline="""%11%\rundll32.exe"" advpack,LaunchINFSection ""%17%\mplayerc.inf"",mplayerc.Uninstal.DelDirs,4" TickCount=500
[mplayerc.Uninstal.DelDirs]
DelDirs=mplayerc.DelDirs
[UnRunCmd]
%16422%\MPlayer Classic\mplayerc.exe /unregvid
[mplayerc.DelDirs]
"%16422%\MPlayer Classic"
[Strings]
RunOnceKey ="SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce"
volk1234
10-03-2008, 20:04
greg_b спасибо за ответ.
2 - в inf-файле должна быть полноценная секция uninstall »
так и не понял,
вопрос был
2. Строка HKLM,Software\Microsoft\Windows\CurrentVersion\Uninstall\MYProgram,"UninstallString",,"rundll32.exe advpack,LaunchINFSectionEx %17%\MY.inf,Uninstall,,64,A" обязательно должна иметь параметр Uninstal? или допускается любое имя секции? »
и что за цифра 64 и буква А в учебнике по INF ?
Просто первое на что я подумал, эта строка. Возможно неправильно указанны папраметры uninstall string.
В вашем примере, так и непонял, используется ли в исполняемой секции следующая запись: Uninstall = mplayerc.Uninstall
volk1234,
1 - речь о полноценной секции [UNINSTALL], с набором всех комманд по очистке от установки
2 - помоему строка у вас сударь неверная, надо как-то вот так:
%11%\rundll32.exe advpack,LaunchINFSection %17%\myprg.inf,Uninstall,4 -
кстати проверь результат записи в реестр, возможно надо настравить кавычек.
volk1234
10-03-2008, 22:39
речь о полноценной секции [UNINSTALL] »
Сделал отдельные секции для удаления, файлы удалились замечательно.
Возникла проблема №2 не удаляются папки
привожу код. Подозрения на кавычки в вызове advpack, но перепробывал все варианты кавычек и слэшей в переменных...
[NL.Uninstall]
DelFiles=DelCopyMain, DelCopyConfig, DelCopyHelp, DelCopyHist, DelCopyLang, DelCopySkin, DelCopySound, DelCopyTools, DelCopyInf, DelRenToolsLang
DelReg=Dreg
Run=NL.AdinfCall
[NL.AdinfCall]
Commandline="""%11%\rundll32.exe"" advpack,LaunchINFSection ""%17%\netlook.inf"",NL.DD,4"
TickCount=500
[NL.DD]
DelDirs=dirs
[dirs]
%16422%\Netlook
[Dreg]
HKLM,"%Key%"
[strings]
Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\Netlook"
Commandline="""%11%\rundll32.exe"" advpack,LaunchINFSection ""%17%\netlook.inf"",NL.DD,4" »
вроде так:
Commandline=""%11%\rundll32.exe" advpack.dll,LaunchINFSection \ "%17%\netlook.inf",NL.DD,4""
volk1234
10-03-2008, 23:16
Commandline="%11%\rundll32.exe" advpack,LaunchINFSection "%17%\netlook.inf",NL.DD,4" »
куда кавычку подевали?
пробовал в 4 вариантах непомогает
без кавычек с одними кавычками и с двумя кавычками... :(
%11%\rundll32.exe advpack,LaunchINFSection %17%\netlook.inf,NL.DD,4
"""%11%\rundll32.exe"" advpack,LaunchINFSection ""%17%\netlook.inf"",NL.DD,4"
""%11%\rundll32.exe" advpack,LaunchINFSection "%17%\netlook.inf",NL.DD,4"
прям заколдованный какойто аддон. Папки как влитые сидят. Нашел в одном аддоне вариант
с cmd /c rd /s /q спецом убрал ключи скрывающие окошко. Походу недоходит до выполнения даже этой команды(cmd не появляется),
однако файлы и данные из реестра удаляет....
volk1234,
не advpack, а advpack.dll
volk1234
11-03-2008, 00:18
не advpack, а advpack.dll »
что в лоб что полбу
%16422%\Netlook
в кавычки
ЗЫ возможно какой-то процесс сидит, и папку удалить из-за этого невозможно...
volk1234
11-03-2008, 00:41
в кавычки »
и в кавычки и обратный слэш
jameszero
11-03-2008, 08:30
volk1234
А файл netlook.inf в папку Windows\inf не забыли скопировать?
volk1234
11-03-2008, 10:47
еслибы. И копировал и переименовывал и так оставлял.
Вот что у меня получилось с вашей помощью,
файлы , ярлыки, записи в реестре, удаляются. Папки остаются. :(
и еще скрипт для генерации аддонов, почемуто в секции анинсталяции
предлагает вот такой путь "%-1%/Netlook/ вместо %1642%...
...[Uninstall]
BeginPrompt =BeginUnInsPrompt
ProfileItems =PROG.DelShortcut
RunPostSetupCommands =Dir.Delete
DelReg =PROG.DelReg
EndPrompt =EndUnInsPrompt
[BeginUnInsPrompt]
Prompt=Программа %PROGNAME% удалить?
[EndUnInsPrompt]
Prompt=Программа %PROGNAME% удалена.
[Close.Prog]
TASKKILL /F /IM %EXENAME%
[Dir.Delete]
rundll32.exe advpack.dll,DelNodeRunDLL32 %16422%\%PROGDIR%
[PROG.DelReg]
HKLM,"%UNINSTALL%"
[PROG.AddReg]
HKLM,"%UNINSTALL%","DisplayIcon",0,"%16422%\%PROGDIR%\%EXENAME%"
HKLM,"%UNINSTALL%","DisplayName",,"%PROGNAME%"
HKLM,"%UNINSTALL%","DisplayVersion",,"v%VERSION%"
HKLM,"%UNINSTALL%","Publisher",,"%PABLISHER%"
HKLM,"%UNINSTALL%","URLInfoAbout",,"%URL%"
HKLM,"%UNINSTALL%","UninstallString",,"rundll32.exe advpack.dll,LaunchINFSection %NAMEINF%, UnInstall"
...
[Strings]
PROGNAME ="Regshot v.1.7"
PROGPATH =
UNINSTALL ="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\RegshotClassic"
PROGDIR ="Regshot v.1.7"
EXENAME ="regshot.exe"
VERSION ="1.7.2.2"
PABLISHER ="OSzone.net"
URL ="https://sourceforge.net/projects/regshot"
NAMEINF ="regshotcl.inf"
SHPATH ="Утилиты"
SHINFO ="Снимок реестра"
...
Кусочек кода, который отвечает за деинсталяцию вместе с папками.
jameszero
11-03-2008, 11:34
volk1234
Поскольку удаление папок осуществляется через advpack, то вместо инструкции Run нужно использовать RunPostSetupCommands
Run обрабатывается только через setupapi
volk1234
11-03-2008, 11:51
помогло предложение jameszero
и разглядывание инфа созданного скриптом
работает только такой вариант
с RunPostSetupCommands и удаление папок по одной:
[NL.Uninstall]
DelFiles=DelCopyMain, DelCopyConfig, DelCopyHelp, DelCopyHist, DelCopyLang, DelCopySkin, DelCopySound, DelCopyTools, DelCopyInf, DelRenToolsLang
DelReg=Dreg
ProfileItems = ShortcutD
RunPostSetupCommands=NL.AdinfCall
[NL.AdinfCall]
Commandline="""%11%\rundll32.exe"" advpack,LaunchINFSection ""%17%\netlook.inf"",NL.DD,4"
[NL.DD]
DelDirs=dirs
[dirs]
"%16422%\Netlook\Tools\Configurator\Languages"
"%16422%\Netlook\Tools\Configurator"
"%16422%\Netlook\Tools"
"%16422%\Netlook\Sound"
"%16422%\Netlook\Skin"
"%16422%\Netlook\Languages"
"%16422%\Netlook\Help"
"%16422%\Netlook\Config"
"%16422%\Netlook"
[Dreg]
HKLM,"%Key%"
[ShortcutD]
Name = "Netlook 2.3",0x00000002
SubDir = "Утилиты"
[strings]
Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\Netlook"
volk1234, удаление папок по одной » - ну вот и разобрался, я на аналогичные грабли наступал с аддоном qip infium - там море папок, удлял по одной в обратном порядке.
volk1234&greg_b
Что-то я Вас не понял. Задача стоит удалить все папки либо по одной?
rundll32.exe advpack.dll,DelNodeRunDLL32 %16422%\%PROGDIR% Такая строчка удалит полностью корневую папку со всеми вложенными.
[Uninstall]
BeginPrompt =BeginUnInsPrompt
ProfileItems =PROG.DelShortcut
RunPostSetupCommands =Dir.Delete
DelReg =PROG.DelReg
EndPrompt =EndUnInsPrompt
[BeginUnInsPrompt]
Prompt=Программа %PROGNAME% удалить?
[EndUnInsPrompt]
Prompt=Программа %PROGNAME% удалена.
[Close.Prog]
TASKKILL /F /IM %EXENAME%
[Dir.Delete]
rundll32.exe advpack.dll,DelNodeRunDLL32 %16422%\%PROGDIR%
[PROG.AddReg]
HKLM,"%UNINSTALL%","DisplayIcon",0,"%16422%\%PROGDIR%\%EXENAME%"
HKLM,"%UNINSTALL%","DisplayName",,"%PROGNAME%"
HKLM,"%UNINSTALL%","DisplayVersion",,"v%VERSION%"
HKLM,"%UNINSTALL%","Publisher",,"%PABLISHER%"
HKLM,"%UNINSTALL%","URLInfoAbout",,"%URL%"
HKLM,"%UNINSTALL%","UninstallString",,"rundll32.exe advpack.dll,LaunchINFSection %NAMEINF%, UnInstall"
[PROG.DelReg]
HKLM,"%UNINSTALL%"
[PROG.AddShortcut]
Name =%PROGNAME%
CmdLine =16422,%PROGDIR%,%EXENAME%
WorkingDir =16422,%PROGDIR%
SubDir =%SHPATH%
InfoTip =%SHINFO%
[PROG.DelShortcut]
Name =%PROGNAME%,0x00000002
SubDir =%SHPATH%
[Strings]
PROGNAME ="QIP Infium"
PROGPATH =
UNINSTALL ="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\QIP Infium"
PROGDIR ="QIP Infium"
EXENAME ="infium.exe"
VERSION ="9000 b"
PABLISHER ="OSzone.net"
URL ="http:\\www.qip.ru"
NAMEINF ="qipinfium.inf"
SHPATH ="Интернет"
SHINFO ="ICQ-клиент"
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC