PDA

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


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 [32] 33 34

BigBoo
30-11-2010, 02:30
Такой вопрос. Аддон типа 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"

BigBoo
30-11-2010, 16:48
jameszero, спасибо, так работает! Надеюсь, эта информация будет полезна и другим участникам форума, по крайней мере про реализацию данного приёма удаления для аддонов sysoc типа нигде так подробно не говорилось. Думаю, достойно включения в учебник!

BigBoo
30-11-2010, 17:08
Часто встречал такой параметр: TickCount=500
В учебнике ничего не сказано, да и при попытке поискать - смутная информация. Всё-таки интересно: за что он отвечает и так ли действительно нужен?

Habetdin
30-11-2010, 21:47
достойно включения в учебник »
Руководство по работе с INF файлами (http://www.oszone.net/3827) » 6.5 Удаление файлов и директорий (http://www.oszone.net/3827#cpf5)

BigBoo
01-12-2010, 03:24
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

ya158
30-12-2010, 22:30
Никак не могу удалить папку в пути, к которой присутствуют кириллические символы :(
Кто-нибудь знает, как удалить папку c:\Documents and Settings\All Users\Документы\Folder\ ?

BigBoo
31-12-2010, 00:27
ya158, не вижу никаких проблем в кириллице. Промеделировал Вашу ситуацию, rundll32.exe advpack,DelNodeRunDLL32 "c:\Documents and Settings\All Users\Документы\Folder\" - команда удалила папку легко. У INF файла по моему вообще не существует проблем с кириллицей. Или Вы имеете ввиду не INF?

ya158
31-12-2010, 00:45
BigBoo,
А как запускал команду?

BigBoo
31-12-2010, 01:15
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-файлов в системе присутствует по умолчанию.

ya158
31-12-2010, 07:44
BigBoo,
Я делаю всё то же самое, но папка не удаляется :(. Буду искать дальше.

ya158
31-12-2010, 14:37
Всё разобрался. Переменная %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

BigBoo
31-12-2010, 18:21
Кстати нашёл список ID директорий, которые не указаны » - указаны, только в Руководстве по созданию аддонов (http://oszone.net/6946#d1)

vserd
08-01-2011, 19:46
Дополнение к тайм-лайну
на Т-34 (Установка устройств) происходит отработка HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Runonce
Это означает что если добавить записи в эту ветку через hive файл, он отработает на Т34, а не при первом входе в систему.

ya158
20-02-2011, 19:12
В моём аддоне 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-интегратор использует свои скрипты.

ya158
21-02-2011, 16:14
Проводить проверку условий нужно на начальных этапах, чтобы не тратить время на интеграцию, которую в итоге прервёт Finish.
Посмотрите, как реализована проверка в файле ChkDistr Набора обновлений. »
Но ведь из аддона доступны только Start, Finish и SpecCase. Или я не прав - можно влиять на работу __PATCH.CMD ещё с помощью каких-нибудь файлов?

jameszero
21-02-2011, 18:43
ya158
__PATCH.CMD обрабатывает ChkDistr в том числе и в аддонах.

onis
28-06-2011, 12:13
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