Показать полную графическую версию : Авторам аддонов
Такой вопрос. Аддон типа sysoc. Как в процессе деинсталяции через "Программы сторонних разработчиков" обеспечить полное удаление папки с подпапками и файлами командой rundll32.exe advpack,DelNodeRunDLL32? Пишу:
[Version]
Signature="$Windows NT$"
SetupClass=BASE
[Optional Components]
Proga
[Proga]
Uninstall=Proga.Uninstall
[Proga.Uninstall]
RunPostSetupCommands=Proga.DelDirs
[Proga.DelDirs]
rundll32.exe advpack.dll,DelNodeRunDLL32 "%16422%\Proga_Folder"
-не работает. Использую Run вместо RunPostSetupCommands - тоже не работает. Процессы, которые нужно прибивать, прога никаких не создаёт.
Самое интересное - выполняю скрипт вручную командой rundll32 advpack,LaunchINFSection Proga.inf, Proga.UnInstall,0 - РАБОТАЕТ!
Подскажите, в чём ошибка?
p.s. Прога portable, создающая в своём каталоге кучу файлов и папок, в том числе временных. Использовать обычные методы удаления с указанием удаляемых файлов, далее папок и т.д. в силу их кол-ва просто не возможно и очень не удобно. Кстати у проги есть свой деинсталятор, который также не удаляет папку и оставшийся хлам в ней.
jameszero
30-11-2010, 13:49
BigBoo
Ответ на вопрос почему не работает содержится в самом вопросе:
выполняю скрипт вручную командой rundll32 advpack,LaunchINFSection Proga.inf, Proga.UnInstall,0 - РАБОТАЕТ! »
Вручную вы запускаете процесс через advpack, а "Установка компонентов Windows" работает через setupapi и не знает, что такое advpack.dll,DelNodeRunDLL32
Решение:
[Version]
Signature="$Windows NT$"
[Optional Components]
Proga
[Proga]
OptionDesc="Program"
Uninstall=Proga.Uninstall
[Proga.Uninstall]
OptionDesc="Program"
Run=Proga.AdvInfCall
[Proga.AdvInfCall]
Commandline="rundll32.exe advpack.dll,DelNodeRunDLL32 "%16422%\Proga_Folder""
TickCount=500
или
[Version]
Signature="$Windows NT$"
[Optional Components]
Proga
[Proga]
OptionDesc="Program"
Uninstall=Proga.Uninstall
[Proga.Uninstall]
OptionDesc="Program"
Run=Proga.AdvInfCall
[Proga.AdvInfCall]
Commandline="rundll32.exe advpack,LaunchINFSection proga.inf,Proga.AdvUninst,4"
TickCount=500
[Proga.AdvUninst]
RunPostSetupCommands=Proga.AdvDelDirs
[Proga.AdvDelDirs]
rundll32.exe advpack.dll,DelNodeRunDLL32 "%16422%\Proga_Folder"
jameszero, спасибо, так работает! Надеюсь, эта информация будет полезна и другим участникам форума, по крайней мере про реализацию данного приёма удаления для аддонов sysoc типа нигде так подробно не говорилось. Думаю, достойно включения в учебник!
Часто встречал такой параметр: TickCount=500
В учебнике ничего не сказано, да и при попытке поискать - смутная информация. Всё-таки интересно: за что он отвечает и так ли действительно нужен?
Habetdin
30-11-2010, 21:47
достойно включения в учебник »
Руководство по работе с INF файлами (http://www.oszone.net/3827) » 6.5 Удаление файлов и директорий (http://www.oszone.net/3827#cpf5)
Habetdin, - как раз всё и делал по учебнику! Метод удаления rundll32.exe advpack.dll,DelNodeRunDLL32 в аддонах SYSOC "по учебнику" оказывается НЕ работает!
[Proga.DelDirs]
rundll32.exe advpack.dll,DelNodeRunDLL32 "%16422%\Proga_Folder" - НЕ работает.
[Proga.DelDirs]
Commandline="rundll32.exe advpack.dll,DelNodeRunDLL32 "%16422%\Proga_Folder"" - Работает.
jameszero
01-12-2010, 08:31
BigBoo
Работают оба метода, только в них используются разные интерпретаторы (http://www.oszone.net/3827#interpreters), команды вызова секций тоже разные соответственно:
rundll32.exe advpack,LaunchINFSection inffile.inf, infsection,0
rundll32.exe setupapi,InstallHinfSection infsection 132 inffile.inf
Никак не могу удалить папку в пути, к которой присутствуют кириллические символы :(
Кто-нибудь знает, как удалить папку c:\Documents and Settings\All Users\Документы\Folder\ ?
ya158, не вижу никаких проблем в кириллице. Промеделировал Вашу ситуацию, rundll32.exe advpack,DelNodeRunDLL32 "c:\Documents and Settings\All Users\Документы\Folder\" - команда удалила папку легко. У INF файла по моему вообще не существует проблем с кириллицей. Или Вы имеете ввиду не INF?
BigBoo,
А как запускал команду?
Proga.inf:
[Version]
Signature="$Windows NT$"
[UnInstall]
RunPostSetupCommands=Proga.DelDirs
[Proga.DelDirs]
rundll32.exe advpack,DelNodeRunDLL32 "c:\Documents and Settings\All Users\Документы\Folder\"
Запуск командой: rundll32 advpack,LaunchINFSection Proga.inf, UnInstall,0
Может кому пригодится, для упрощения тестирования INF-файлов применяю твик (вношу в аддон MyCustom):
[HKCR.AddReg]
;Добавление новых пунктов в контекстное меню для .inf файлов
HKCR,"inffile\shell\Install1",,0x0,"Деинсталировать"
HKCR,"inffile\shell\Install1\command",,0x20000,"rundll32 setupapi,InstallHinfSection UnInstall 132 %%1"
HKCR,"inffile\shell\Install2",,0x0,"Установить через ADVPack"
HKCR,"inffile\shell\Install2\command",,0x20000,"rundll32 advpack,LaunchINFSection %%1, DefaultInstall,0"
HKCR,"inffile\shell\Install3",,0x0,"Деинсталировать через ADVPack"
HKCR,"inffile\shell\Install3\command",,0x20000,"rundll32 advpack,LaunchINFSection %%1, UnInstall,0"
p.s. Пункт "Установить" для INF-файлов в системе присутствует по умолчанию.
BigBoo,
Я делаю всё то же самое, но папка не удаляется :(. Буду искать дальше.
Всё разобрался. Переменная %ALLUSERSPROFILE% не работае в этом месте в inf-файлах. Надо использовать переменную %16430%
Кстати нашёл список ID директорий, которые не указаны в Руководстве по работе с INF файлами (http://oszone.net/3827):
16406
All Users\Start Menu
16407
All Users\Start Menu\Programs
16408
All Users\Start Menu\Programs\Startup
16409
All Users\Desktop
16415
All Users\Favorites
16419
All Users\Application Data
16422
Program Files
16425
%SystemRoot%\system32 (valid for Microsoft Win32 user-mode applications that are running under Windows on Windows (WOW64))
16426
Program Files (valid for Win32 user-mode applications that are running under WOW64)
16427
Program Files\Common
16428
Program Files\Common (valid for Win32 user-mode applications that are running under WOW64)
16429
All Users\Templates
16430
All Users\Documents
Кстати нашёл список ID директорий, которые не указаны » - указаны, только в Руководстве по созданию аддонов (http://oszone.net/6946#d1)
Дополнение к тайм-лайну
на Т-34 (Установка устройств) происходит отработка HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Runonce
Это означает что если добавить записи в эту ветку через hive файл, он отработает на Т34, а не при первом входе в систему.
В моём аддоне MultibootDisk (http://forum.oszone.net/thread-198119.html) меню выбора вариантов установки создаётся при наличии пары файлов №.txt и WINN№.SIF (где № - 1,2,3....) с помощью Finish. Я хотел бы проверять наличие одного файла из этой пары при нахождении другого. При этом бы хотелось бы, чтобы интегратор (__PATCH.CMD м GUI) останавливал бы процесс интеграции и выводил бы сообщение об ошибке.
У меня есть предложение - создать глобальные переменные Error и TextError. Start, Finish и SpecCase при возникновении ошибки будут присваивать Error=1 и TextError=Текст_ошибки и завершать свою работу . __PATCH.CMD после вызова Start, Finish и SpecCase будет проверять значение этих переменных и при Error=1 останавливать свою работу с выводом текста ошибки - "Аддон такой-то завершил свою работу из-за следующей ошибки: "Текст_ошибки"".
По поводу GUI-интегратора - думаю Boa Soft сможет добавить такой функционал.
Это добавит возможность авторам аддонов проверять наличие файлов или значения параметров и останавливавть процесс интеграции с запросом изменить значение параметров или положить определенный файл в папку.
jameszero
21-02-2011, 10:04
ya158
Проводить проверку условий нужно на начальных этапах, чтобы не тратить время на интеграцию, которую в итоге прервёт Finish.
Посмотрите, как реализована проверка в файле ChkDistr Набора обновлений.
Оговорюсь, это работает только при интеграции с помощью __PATCH.CMD, GUI-интегратор использует свои скрипты.
Проводить проверку условий нужно на начальных этапах, чтобы не тратить время на интеграцию, которую в итоге прервёт Finish.
Посмотрите, как реализована проверка в файле ChkDistr Набора обновлений. »
Но ведь из аддона доступны только Start, Finish и SpecCase. Или я не прав - можно влиять на работу __PATCH.CMD ещё с помощью каких-нибудь файлов?
jameszero
21-02-2011, 18:43
ya158
__PATCH.CMD обрабатывает ChkDistr в том числе и в аддонах.
4 Файл name.res - файл "копирайтов" известный пользователям "Кнопки для работы с 7z SFX архивами в ТС". Кто не знаком с его структурой, посмотрите здесь. В нем только добавлены несколько строк для работы Compiler_Addon (на примере аддона DeskHedron_1.00_RU):
;fstbildat=06.11.2008
;name=DeskHedr
;fullname=DeskHedron_1.00_RU
;ComprModule=0
;UpDate=0
;Pass=1 »
подскажите как это править и где
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC