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