Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для jameszero

Модератор


Moderator


Сообщения: 4920
Благодарности: 2580

Профиль | Сайт | Отправить PM | Цитировать


DJ Electronic
Если секция установки/деинсталляции вызывается через setupapi, то запуск файлов отрабатывает только через директиву Run.
Если секция установки/деинсталляции вызывается через advpack, то запуск файлов отрабатывает только через директивы RunPreSetupCommands и RunPostSetupCommands.
А так же, через advpack не отрабатывают команды RegisterDlls и UnRegisterDlls

Обычный запуск установки (по правой кнопке на inf-файле - "Установить") вызывает, как раз интерпретатор setupapi (со всеми вытекающими).

Я для тестирования inf-файлов применяю следующий твик:
Код: Выделить весь код
[Version]
Signature=$Windows NT$

[DefaultInstall]
AddReg	= TWEAKS.AddReg
DelReg	= TWEAKS.DelReg

[TWEAKS.AddReg]
HKCR,"inffile\shell\Install1",,0x0,"Install"
HKCR,"inffile\shell\Install1\command",,0x20000,"%%SystemRoot%%\System32\rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 %%1"
HKCR,"inffile\shell\Install2",,0x0,"UnInstall"
HKCR,"inffile\shell\Install2\command",,0x20000,"%%SystemRoot%%\System32\rundll32.exe setupapi,InstallHinfSection UnInstall 132 %%1"
HKCR,"inffile\shell\Install3",,0x0,"AdvInstall"
HKCR,"inffile\shell\Install3\command",,0x20000,"%%SystemRoot%%\System32\rundll32.exe advpack.dll,LaunchINFSection %%1, DefaultInstall,0"""
HKCR,"inffile\shell\Install4",,0x0,"AdvUnInstall"
HKCR,"inffile\shell\Install4\command",,0x20000,"%%SystemRoot%%\System32\rundll32.exe advpack.dll,LaunchINFSection %%1, UnInstall,0"""

[TWEAKS.DelReg]
HKCR,"inffile\shell\Install"
т.е. стандартная команда "Установить" из контекстного меню inf-файлов удаляется, но добавляются четыре новых пункта.
Install
UnInstall
AdvInstall
AdvUnInstall
Первый и второй пункты (значения, надеюсь понятны) отрабатывают через setupapi, третий и четвёртый делают тоже самое через advpack.
Примечание: для деинсталляции из контекстного меню inf-файла, соответствующая секция должна называться [Uninstall] и никак иначе (регистр букв не важен).

В "Руководстве по созданию аддонов" есть такой текст:
Цитата:
Важное замечание по синтаксису INF- скрипта. При вызове интерпретатора из INF-файла имеются различия вызова через setupapi.dll и advpack.dll. Вызов setupapi.dll должен осуществляться через инструкцию Run= , а вызов advpack.dll - только через RunPostSetupCommands=
но он не совсем точен (или я его не так понял). Различия между setupapi.dll и advpack.dll имеются, и о них я написал в начале поста, но ничего не мешает использовать setupapi для вызова секции, отрабатывающей через advpack.
Пример:
Код: Выделить весь код
[Uninstall]
Run=opera.AdvInfCall

[opera.AdvInfCall]
Commandline="""%11%\rundll32.exe"" advpack,LaunchINFSection ""%17%\Opera.inf"",Opera.Uninstal.DelDirs,4"
TickCount=500

-------
RuntimePack официальный сайт
--
мои аддоны в облаке

Не было печали, апдейтов накачали.

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:42, 08-08-2008 | #241