How-To: Инсталиране на .inf файлове през Command Prompt чрез RunDLL32.exe

Сигурно знаете, че .INF файловете в Windows служат и за инсталиране на драйвери. Те съдържат информация за това какво, къде, как и под какво име да бъде копирано и т.н. Ако отворите папката с драйверите за Вашата LAN карта (например) ще намерите разнообразни файлове, но и поне един .INF. Избирайки го с десен бутон на мишката ще видите в контекстното му меню опция “Install”. Ако я изберете Windows ще копира необходимото в %SYSTEMROOT%\System32, %SYSTEMROOT%\inf ит.н. От тук на сетне Windows ще знае какво да прави, когато физически добавите LAN картата, чиито драйвери инсталирахте преди малко.

Често .INF файловете се използват и при други случаи. В статията “Интересен Син екран или какви са последствията от кирилицата на ИнжИнера”съм добавил архив на фонетична клавиатурна подредба. Ако го отворите ще видите само три файла: bpnom.inf, kbdbp$$$.dll и инструкция за инсталация, в която пише:маркирайте .INF файла и да щракнете върху INSTALL:

Това обаче е GUI варианта. Ами ако трябва да инсталираме клавиатурната подредба чрез startup скрипт, без намесата на потребителя и неговата мишка?

В статията ще разгледаме именно автоматизираната инсталация на фонетичната клавиатурна подредба. По аналогичен начин може да използвате идейката за подобни случаи.

Вариантът е да направимbatch скрипт (.bat или .cmd), в който да сътворим някаква магия – дефактоинсталацията ще се изпълни презCommand-Line.
За целта ще използваме инструмента RunDLL32.exe, в комбинация с динамичната библиотека setupapi.dll. Последната е интересна, защото именно тя съдържа апетитната възможност за инсталиране на .inf файл.

RunDLL32.exe е програма, чрез която можем да изпълняваме изнесени функции*от динамични библиотеки (DLL exported functions). Форматът е:

RUNDLL.EXE <ИмеНаDLLФайла>,<ИмеНаФункция> <АргументиНаФункцията>

* Изнесените функции за RUNDLL32.EXE са специфични и имат определен формат [http://support.microsoft.com/kb/164787 ]

Фунцкцията от SetupApi.DLL, която ни трябва се нарича InstallHinfSection [http://msdn.microsoft.com/en-us/library/aa376957(VS.85).aspx ]. На езика на RunDLL32.exe тя има три параметъра:<секцияОтInfФайла> <режимНаРабота> <ПътКъмInfФайла>

  • <секцияОтInfФайла>ще намерим в .INF файла на клавиатурната подредба (bpnom.inf):

    [DefaultInstall] – за инсталация на фонетичната подредба
    CopyFiles=Keyboard_Copy_Files,ToINF
    AddReg=KeyboardReg,UnistReg

    [Deinst] – задеинсталация на фонетичната подредба
    DelReg=KeyboardReg,UnistReg
    DelFiles=Keyboard_Copy_Files,ToINF

    * Ние ще инсталираме, така че се интересуваме от секцията DefaultInstall.
    ** Името на секцията не може да съдържа интервали.

  • <режимНаРабота> – указва как ще действа фунцкиятаInstallHinfSection. Възможни са следните стойности :
Value Description
0 System provided INF.
128 Set the default path of the installation to the location of the INF. This is the typical setting.
+0 Never reboot the computer.
+1 Reboot the computer in all cases.
+2 Always ask the users if they want to reboot.
+3 Reboot the computer if necessary without asking user for permission.
+4 If a reboot of the computer is necessary, ask the user for permission before rebooting.

* [ http://msdn.microsoft.com/en-us/library/aa376957(VS.85).aspx]

Логичната стойност е 132 (128+4), но тъй като ние не искаме да питаме потребителя за каквото и да е било – избираме 131 (128+3)

  • <ПътКъмInfФайла> – ето тук става интересно. Не можем да напишем само bpnom.inf, а трябва да посочим и пълния път до него. Ако последния съдържа интервали би било логично да го поставим в кавички, НО НЕ?!?Кавичките са забранени в случая! (за мен товае нелогично 🙂 )

Пътят може да се посочи така:
.\myInf.inf – .inf файла се намира в папката, от която стартираме RUNDLL32.EXE/скрипта;
c:\install\some program\myInf.inf – пълен път, който съдържа интервали (кавичките не се записват);
\\someComputerName\sharedInstallFolder\myInf.inf – UNC път до .INF файла. Това е приложимо предимно в домейн среда (идеално за startup скрипт), защото там автентикацията е единна.

Знаейки тооолкова много теория, вече можем да напишем едноредовата есенция – т.е. нашия скрипт 🙂 Сглобявайки пъзела заклинанието изглежда така:

* За автоматизирана инсталация:
RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 131 .\bpnom.inf

* За автоматизирана ДЕинсталация:
RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection Deinst 131 .\bpnom.inf

В случая използвам .\ защото скрипта ще се стартира от потребителя. Ако използвате startup скрипт посочете пълния път до папката (ако файловете съществуват локално на компютъра) или UNC пътя до папката, където се намират файловете на клавиатурната подредба и .inf файла (трябва да са в една папка!!!)

  1. Създайте файл с име по Ваш избор в папката, където се намират bpnom.inf иkbdbp$$$.dll. Аз съчиних това: installBgPhonNom.cmd
  2. В него записвате: RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 131 .\bpnom.inf

Ако всичко е наред, след стартирането му ще видите за кратко диалоговия прозорец за копиране на файлове на Windows. Фонетиката вече е инсталирана и можете да я добавите от Control Panel 🙂

Успех!

2 thoughts on “How-To: Инсталиране на .inf файлове през Command Prompt чрез RunDLL32.exe

  1. И тъй и тъй си почнал да описваш тиха инсталация на фонетиката на Инжинера, добави и конфигуриране през регистъра на езика, превключването, разширената поддръжка на BG във всички приложения… Да стане завършена работа!

  2. Не демонстрирам тиха инсталация на фонетиката на Инженера, а тази от НОМ. Като остане време ще пиша и за останалите неща 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *

*