Войти

Показать полную графическую версию : Помогите откорректировать скрипт inf-а


Nun-Nun
04-01-2011, 01:27
Сделал аддон, но вылезло несколько проблем:
1) при деинсталляции не удаляются иконки;
2) при деинсталляции через "Установка и удаление программ" записи из реестра не удаляются, а при попытке удалить запись из HKСU или HKLM вручную выскакивает сообщение "Не удаётся открыть "7-Zip". Ошибка при открытии раздела". Если игнорирую и удаляю, то необходимые ветки удаляются сразу и из HKСU и из HKLM. Проблема деинсталляции решается только прописыванием %24%\%PROG_DIR%\Uninst.exe (внутри батник+reg-файл) в секции [Close.Prog], но подозреваю, что это экстрим.

Вот скрипт текстового файла от архива 7Zip и Inf-файла, расположенного внутри.
;!@Install@!UTF-8!
SetEnvironment="Name=7-Zip"
SetEnvironment="Vers= 9.20"
SetEnvironment="PathInst=%SystemDrive%\\ARC\\7-Zip"
SetEnvironment="NameInf=7-Zip.inf"
SetEnvironment="DelOld7Zip1=hidcon:cmd /c reg delete \"HKCU\\Software\\7-Zip\" /f"
SetEnvironment="DelOld7Zip2=hidcon:cmd /c reg delete \"HKLM\\Software\\7-Zip\" /f"
SetEnvironment="DelOld7Zip3=hidcon:cmd /c reg delete \"HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\7-Zip_Addon\" /f"
Title="Установка %Name%"
InstallPath="%PathInst%"
BeginPrompt="Сейчас будет установлен %Name%%Vers%"
ExtractTitle="Распаковка файлов..."
ExtractDialogText="Подождите..."
RunProgram="%DelOld7Zip1%"
RunProgram="%DelOld7Zip2%"
RunProgram="%DelOld7Zip3%"
RunProgram="fm0:hidcon:cmd /c Move %NameInf% %WINDIR%\\INF"
RunProgram="rundll32 advpack,LaunchINFSection %NameInf%,DefaultInstall,0"
RunProgram="fm0:Install.exe"
AutoInstall1="%DelOld7Zip1%"
AutoInstall1="%DelOld7Zip2%"
AutoInstall1="%DelOld7Zip3%"
AutoInstall1="fm0:hidcon:cmd /c Move %NameInf% %WINDIR%\\INF"
AutoInstall1="rundll32 advpack,LaunchINFSection %NameInf%,DefaultInstall,0"
AutoInstall1="fm0:Install.exe"
Shortcut="26,{%PathInst%\\7zFM.exe},{},{Microsoft\\Internet Explorer\\Quick Launch},{},{%Name%%Vers%},{%PathInst%}"
Shortcut="P,{%PathInst%\\7zFM.exe},{},{Архиваторы\\7-Zip},{},{%Name%%Vers%},{%PathInst%}"
Shortcut="P,{%PathInst%\\Uninst.exe},{},{Архиваторы\\7-Zip},{},{Удаление %Name%%Vers%},{%PathInst%}"
Shortcut="D,{%PathInst%\\7zFM.exe},{},{},{},{7-Zip},{%PathInst%}"
Shortcut1="26,{%PathInst%\\7zFM.exe},{},{Microsoft\\Internet Explorer\\Quick Launch},{},{%Name%%Vers%},{%PathInst%}"
Shortcut1="P,{%PathInst%\\7zFM.exe},{},{Архиваторы\\7-Zip},{},{%Name%%Vers%},{%PathInst%}"
Shortcut1="P,{%PathInst%\\Uninst.exe},{},{Архиваторы\\7-Zip},{},{Удаление %Name%%Vers%},{%PathInst%}"
Shortcut1="D,{%PathInst%\\7zFM.exe},{},{},{},{7-Zip},{%PathInst%}"
GUIFlags="2+4+8+16+32+2048+4096"
GUIMode="1"
FinishMessage="%Name%%Vers% установлен!"
;!@InstallEnd@!

[Version]
Signature="$Windows NT$"

[DefaultInstall]
AddReg =PROG.AddReg
; CopyFiles =Files1,Files2

[Uninstall]
BeginPrompt =BeginUnInsPrompt
RunPreSetupCommands =Close.Prog:1
RunPostSetupCommands=Dir.Delete:1
EndPrompt =EndUnInsPrompt
DelFiles =Files1:1, Files2:1
DelReg =PROG.DelReg
ProfileItems =PROG.DelShortcut,PROG2.DelShortcut,PROG3.DelShortcut

[BeginUnInsPrompt]
Title =Деинсталляция %PROG_NAME%
Prompt =Вы действительно хотите удалить %PROG_NAME% и все компоненты программы?
ButtonType =YESNO

[Close.Prog]
TASKKILL /F /IM %PROG_1%
TSKILL %PROG_2%
%24%\%PROG_DIR%\Uninst.exe

[Dir.Delete]
rundll32.exe advpack.dll,DelNodeRunDLL32 %24%\%PROG_DIR%

[EndUnInsPrompt]
Prompt =Программа %PROG_NAME% удалена.

[DestinationDirs]
Files1=-1, %24%\%PROG_DIR1%
Files2=-1, %24%\%PROG_DIR%

[Files1]
en.ttt
ru.txt

[Files2]
7-zip.chm
7-zip.dll
7z.dll
7z.exe
7z.sfx
7zCon.sfx
7zFM.exe
7zG.exe
Descript.ion
History.txt
License.txt
Readme.txt
Uninstall.exe
Uninst.exe

[PROG.AddReg]
HKCU,%KEY_UNINST1%,"Path",0x0,"%24%\%PROG_DIR%"
HKCU,%KEY_UNINST1%,"Lang",0x0,"ru"
HKCU,"%KEY_UNINST1%\FM","Editor",0x0
HKCU,"%KEY_UNINST1%\FM","Diff",0x0
HKCU,"%KEY_UNINST1%\FM","ShowDots",0x10001,00,00,00,00
HKCU,"%KEY_UNINST1%\FM","ShowSystemMenu",0x10001,00,00,00,00
HKCU,"%KEY_UNINST1%\FM","ShowRealFileIcons",0x10001,00,00,00,00
HKCU,"%KEY_UNINST1%\FM","FullRow",0x10001,00,00,00,00
HKCU,"%KEY_UNINST1%\FM","ShowGrid",0x10001,00,00,00,00
HKCU,"%KEY_UNINST1%\FM","AlternativeSelection",0x10001,00,00,00,00
HKCU,"%KEY_UNINST1%\FM","SingleClick",0x10001,00,00,00,00
HKCU,"%KEY_UNINST1%\FM","FolderShortcuts",0x1
HKCU,"%KEY_UNINST1%\FM","FolderHistory",0x1,43,00,3a,00,5c,00,54,00,65,00,6d,00,70,00,5c,00,00,00,43,00,3a,00,5c,00,00,00,1a,04,3e,04,3c,04 ,3f,04,4c,04,4e,04,42,04,35,04,40,04,5c,00,00,00,00,00
HKCU,"%KEY_UNINST1%\FM","PanelPath0",0x0,"%24%Temp\"
HKCU,"%KEY_UNINST1%\FM","FlatViewArc0",0x10001,00,00,00,00
HKCU,"%KEY_UNINST1%\FM","PanelPath1",0x0
HKCU,"%KEY_UNINST1%\FM","FlatViewArc1",0x10001,00,00,00,00
HKCU,"%KEY_UNINST1%\FM","ListMode",0x10001,02,03,00,00
HKCU,"%KEY_UNINST1%\FM","Position",0x1,42,00,00,00,54,00,00,00,f2,04,00,00,c2,03,00,00,00,00,00,00
HKCU,"%KEY_UNINST1%\FM","Panels",0x1,01,00,00,00,00,00,00,00,52,02,00,00
HKCU,"%KEY_UNINST1%\FM\Columns","RootFolder",0x1,01,00,00,00,00,00,00,00,01,00,00,00,04,00,00,00,01,00,00,00,64,00,00,00
HKCU,"%KEY_UNINST1%\FM\Columns","FSDrives",0x1,01,00,00,00,00,00,00,00,01,00,00,00,04,00,00,00,01,00,00,00,64,00,00,00,00,11,00,00,01,00,00,00 ,64,00,00,00,01,11,00,00,01,00,00,00,64,00,00,00,14,00,00,00,01,00,00,00,64,00,00,00,03,11,00,00,01, 00,00,00,64,00,00,00,18,00,00,00,01,00,00,00,64,00,00,00,02,11,00,00,01,00,00,00,64,00,00,00
HKCU,"%KEY_UNINST1%\FM\Columns","FSFolder",0x1,01,00,00,00,00,00,00,00,01,00,00,00,04,00,00,00,01,00,00,00,64,00,00,00,07,00,00,00,01,00,00,00 ,64,00,00,00,0c,00,00,00,01,00,00,00,64,00,00,00,0a,00,00,00,01,00,00,00,64,00,00,00,0b,00,00,00,01, 00,00,00,64,00,00,00,09,00,00,00,01,00,00,00,64,00,00,00,08,00,00,00,01,00,00,00,64,00,00,00,1c,00,0 0,00,01,00,00,00,64,00,00,00
HKCU,"%KEY_UNINST1%\Options","CascadedMenu",0x10001,01,00,00,00
HKCU,"%KEY_UNINST1%\Options","ContextMenu",0x10001,77,3f,00,00
HKCU,"%KEY_UNINST1%\Options","WorkDirType",0x10001,02,00,00,00
HKCU,"%KEY_UNINST1%\Options","WorkDirPath",0x0,"%24%Temp"
HKCU,"%KEY_UNINST1%\Options","TempRemovableOnly",0x10001,01,00,00,00
HKLM,%KEY_UNINST1%,"Path",0x0,"%24%\%PROG_DIR%"
HKLM,%KEY_UNINST%,"DisplayIcon",0,"%24%\%PROG_DIR%\%PROG_1%"
HKLM,%KEY_UNINST%,"DisplayName",,"%PROG_NAME%"
HKLM,%KEY_UNINST%,"DisplayVersion",,"%PROG_VERS%"
HKLM,%KEY_UNINST%,"Publisher",,"%PROG_MADE%"
HKLM,%KEY_UNINST%,"URLInfoAbout",,"%PROG_URL%"
HKLM,%KEY_UNINST%,"UninstallString",,"rundll32 advpack,LaunchINFSection %17%\%NAME_INF%.inf,Uninstall"


[PROG.DelReg]
HKLM,%KEY_UNINST%
HKLM,%KEY_UNINST1%
HKCU,%KEY_UNINST1%

[PROG.DelShortcut]
Name =%SRTC_NAME%,0x00000002
SubDir =%PROG_SDIR%

[PROG2.DelShortcut]
Name =%SRTC_NAME%,0x00000002
SubDir =%PROG_SDIR2%

[PROG3.DelShortcut]
Name =%SRTC_NAME%,0x00000003
SubDir =%PROG_SDIR3%

[Strings]
KEY_UNINST ="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\7-Zip_Addon"
KEY_UNINST1 ="Software\7-Zip"
PROG_DIR ="ARC\7-Zip"
PROG_DIR1 ="ARC\7-Zip\Lang"
PROG_NAME ="7-Zip 9.20"
SRTC_NAME ="7-Zip"
PROG_VERS ="9.20"
PROG_MADE ="Samodelkin.net"
PROG_URL =""
NAME_INF ="7-Zip"
PROG_1 =7zFM.exe
PROG_2 =7-Zip
PROG_SDIR ="Архиваторы\7-Zip"
PROG_SDIR2 ="..\..\Рабочий стол"
PROG_SDIR3 ="..\..\Application Data\Microsoft\Internet Explorer\Quick Launch"

Та же самая процедура удаления, выполненная с помощью батника и reg-файла происходит без проблем.

@Echo off
Move %SystemDrive%\ARC\7-Zip\Uninst.exe %SystemDrive%\Temp
%SystemDrive%\Temp\Uninst.exe
RD /S /Q %SystemDrive%\ARC\7-Zip >nul
Del %SystemRoot%\Inf\7-Zip.inf
Regedit /s Uninst.reg
Del %0

Windows Registry Editor Version 5.00

[-HKEY_CURRENT_USER\Software\7-Zip]
[-HKEY_LOCAL_MACHINE\SOFTWARE\7-Zip]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\7-Zip_Addon]

Bodya.N
05-01-2011, 23:49
Nun-Nun,
1)Ярлыки созданные вами называются "7-Zip 9.20",а не "7-Zip" SRTC_NAME ="7-Zip" » вроде как...
2)Удалите вот это:%24%\%PROG_DIR%\Uninst.exe » и все из реестра удалится.
Не в обиду ,но еслине удаляются иконки...записи из реестра не удаляются »,значит где-то допущена банальная синтаксическая ошибка.
Возьмите для примера уже готовый аддон 7-zip(например от Gora) и сравните .inf со своим.
Прикрепляю .inf который у меня (правда для win 7, ваш для XP будет немного отличаться).
Удачи :) ;)

Nun-Nun
06-01-2011, 04:44
Bodya.N,

С ярлыками уже разобрался. Удаление через апплет "Установка и удаление программ" нормально работает, но хотелось бы добиться того же самого с помощью ярлыка-деинсталлятора в меню "Архиваторы\7-Zip". Насколько понимаю, нужно в качестве выполняемой команды каким-то образом прописать ярлыку такую команду: Rundll32.exe advpack.dll,LaunchINFSection %SystemRoot%\Inf\7-Zip.inf,DefaultInstall,0 . Но как ни пытался - не работает, винда жалуется, что не может найти inf-файл.

Bodya.N
06-01-2011, 13:38
Nun-Nun,все должно работать проверено очень много раз и есливинда жалуется, что не может найти inf-файл »,значит его там попросту нет.
ярлыка-деинсталлятора »
для деинсталяции нужна вот такая команда:Rundll32.exe advpack.dll,LaunchINFSection 7-Zip.inf,Uninstall,0
и еще один момент, если .inf лежит в %windir%\Inf ,то путь к нему прописывать не нужно.

Nun-Nun
06-01-2011, 14:09
Bodya.N,

Да, прошу прощения, Вы правы. Скопировал строку, но не заметил, что там DefaultInstall вместо Uninstall закрался.
значит его там попросту нет. »
К сожалению (или, наоборот, к счастью), он там лежит и никуда не делся. Проверял многократно. Просто вся эта строка Rundll32.exe advpack.dll,LaunchINFSection 7-Zip.inf,Uninstall,0 почему-то работает только при деинсталляции из апплета "Установка и удаление программ", но из меню "Программы" никак работать не хочет. Видимо для команд меню "Пуск" синтаксис иначе прописывается, и как строчка в этом случае должна выглядеть - ... её знает. В общем, на этом дело и застряло. Пришлось для данной цели использовать батник, засунутый в sfx-архив, но в результате возникла проблема с его самоудалением. Пока выкрутился из положения путём запуска батника с переносом его из папки программы в %Temp% и вызовом inf-овской секции [Uninstall], которая при выполнении убивает батниковский процесс, если он запущен, и удаляет батник.
Конечно, если бы удалось разобраться с синтаксисом строки Rundll32.exe advpack.dll,LaunchINFSection 7-Zip.inf,Uninstall,0 применительно к меню "Программы", возможно все эти танцы с бубном и не понадобились.
Прошу прощения за длинное описание.

Bodya.N
06-01-2011, 14:41
меню "Программы" никак работать не хочет »если чесно не понял что работать не хочет?Там находятся всего лишь ярлыки к чему-то...Добавьте в меню "Пуск" ярлык к этому батнику и все заработает.
Можно еще .bat в .exe конвертировать спомощью вот этой (http://www.batchfilecompiler.com/) утилитки(чтобы не создавать SFX архив и ничего никуда не переносить).
А вообще мы не ищем легких путей... :) Совсем забыл есть решение намного проще.Допишите эти строчки в свой скрипт куда следует:

[DefaultInstall]
;Добавить ярлык "Удалить Программу" в Главное меню\Программа
ProfileItems=PROG4.AddShortcut

[Uninstall]
ProfileItems=PROG.DelShortcut,PROG2.DelShortcut,PROG3.DelShortcut,PROG4.DelShortcut

[PROG4.AddShortcut]
Name="%PROG UNINST%"
CmdLine =11,,"rundll32 advpack,LaunchINFSection %17%\%NAME_INF%.inf,Uninstall"
SubDir =%PROG_SDIR%
WorkingDir =11
InfoTip=%INFO%

[PROG4.DelShortcut]
Name =%PROG UNINST%,0x00000002
SubDir =%PROG_SDIR%

[Strings]
PROG UNINST ="Удалить программу"
INFO ="Деинсталляция программы"
и соответственно в конфигурационном файле подправьте создание ярлыков.

Nun-Nun
06-01-2011, 17:02
если чесно не понял что работать не хочет? Там находятся всего лишь ярлыки к чему-то... Добавьте в меню "Пуск" ярлык к этому батнику и все заработает.»
С батником-то ярлык нормально работает. Имелось в виду, что нужно в качестве выполняемой команды присвоить ярлыку не выполнение батника, а строку Rundll32.exe advpack.dll,LaunchINFSection 7-Zip.inf,Uninstall,0 , т.к. тогда не нужно заморачиваться с самоудалением батника.

За ссылку и скрипт моё Вам огромное человеческое спасибо! Трудно новичку разобраться во всех скрипто-хитросплетениях! :) Буду пробовать.




© OSzone.net 2001-2012