Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Хочу все знать (http://forum.oszone.net/forumdisplay.php?f=23)
-   -   Помогите откорректировать скрипт inf-а (http://forum.oszone.net/showthread.php?t=195677)

Nun-Nun 04-01-2011 01:27 1580180

Помогите откорректировать скрипт inf-а
 
Сделал аддон, но вылезло несколько проблем:
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,00,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 1581668

Вложений: 1
Nun-Nun,
1)Ярлыки созданные вами называются "7-Zip 9.20",а не "7-Zip"
Цитата:

Цитата Nun-Nun
SRTC_NAME ="7-Zip" »

вроде как...
2)Удалите вот это:
Цитата:

Цитата Nun-Nun
%24%\%PROG_DIR%\Uninst.exe »

и все из реестра удалится.
Не в обиду ,но если
Цитата:

Цитата Nun-Nun
не удаляются иконки...записи из реестра не удаляются »

,значит где-то допущена банальная синтаксическая ошибка.
Возьмите для примера уже готовый аддон 7-zip(например от Gora) и сравните .inf со своим.
Прикрепляю .inf который у меня (правда для win 7, ваш для XP будет немного отличаться).
Удачи :) ;)

Nun-Nun 06-01-2011 04:44 1581796

Bodya.N,

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

Bodya.N 06-01-2011 13:38 1582056

Nun-Nun,все должно работать проверено очень много раз и если
Цитата:

Цитата Nun-Nun
винда жалуется, что не может найти inf-файл »

,значит его там попросту нет.
Цитата:

Цитата Nun-Nun
ярлыка-деинсталлятора »

для деинсталяции нужна вот такая команда:
Код:

Rundll32.exe advpack.dll,LaunchINFSection 7-Zip.inf,Uninstall,0
и еще один момент, если .inf лежит в %windir%\Inf ,то путь к нему прописывать не нужно.

Nun-Nun 06-01-2011 14:09 1582079

Bodya.N,

Да, прошу прощения, Вы правы. Скопировал строку, но не заметил, что там DefaultInstall вместо Uninstall закрался.
Цитата:

Цитата Bodya.N
значит его там попросту нет. »

К сожалению (или, наоборот, к счастью), он там лежит и никуда не делся. Проверял многократно. Просто вся эта строка 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 1582131

Цитата:

Цитата Nun-Nun
меню "Программы" никак работать не хочет »

если чесно не понял что работать не хочет?Там находятся всего лишь ярлыки к чему-то...Добавьте в меню "Пуск" ярлык к этому батнику и все заработает.
Можно еще .bat в .exe конвертировать спомощью вот этой утилитки(чтобы не создавать 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 1582271

Цитата:

Цитата Bodya.N
если чесно не понял что работать не хочет? Там находятся всего лишь ярлыки к чему-то... Добавьте в меню "Пуск" ярлык к этому батнику и все заработает.»

С батником-то ярлык нормально работает. Имелось в виду, что нужно в качестве выполняемой команды присвоить ярлыку не выполнение батника, а строку Rundll32.exe advpack.dll,LaunchINFSection 7-Zip.inf,Uninstall,0 , т.к. тогда не нужно заморачиваться с самоудалением батника.

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


Время: 02:14.

Время: 02:14.
© OSzone.net 2001-