Създаване на инсталатор на пакетни скриптове в Windows: Пълно ръководство

  • Тиха инсталация с пакетна инсталация: лог файлове, .exe/.msi и CAB разширение.
  • Оркестрация на осигуряване: команден ред и командни файлове.
  • Преки пътища и екстри: изпълнение на 7-Zip, VBScript и PowerShell.
  • Алтернатива на Inno Setup: Зависимости и управление на услуги

Ръководство за създаване на инсталатор с пакетен скрипт

Създаването на собствен инсталатор в Windows с помощта на пакетен файл е по-достъпно, отколкото изглежда, и с внимателна методология може да бъде много надеждно. Ключът е да се комбинират безшумни пакетни скриптове, пакетиране на ресурси и ясна оркестрация. за да се гарантира, че нищо не е оставено на случайността по време на монтажа.

Когато говорим за „пакетен инсталатор“, имаме предвид скрипт .bat или .cmd (или дори Bash скриптове на Windows (WSL)), който автоматизира задачите по внедряването: копиране и разархивиране на файлове, извикване на тихи инсталатори, записване на лог файлове, създаване на преки пътища или услуги и др. Целта е инсталацията да се извършва без намеса на потребителя и по повтаряем начин.

Подготовка на ресурси и пакетирането им в CAB

Преди да напишете и един ред сценарий, е добре да организирате материалите си: обединява всички активи на едно известно място и решете дали ще ги изпратите такива, каквито са, или пакетирани. Ако изберете да копирате файловете „сурови“, уверете се, че всеки файл има уникално име, защото В местоназначението те обикновено попадат в една и съща временна директория. и припокриванията (install.exe, setup.exe и др.) са чести.

За да се избегнат конфликти, най-практичното нещо е да се възпроизведе структура на папките за всяко приложение И, ако желаете, „свържете“ ресурсите като пълна йерархия. По този начин можете да разширите подредено дърво на устройството точно както сте го подготвили, като по този начин минимизирате объркването при именуването.

Ако транспортирате много файлове, пакетирането им в CAB файл улеснява доставката и по-късното разширяване. За да направите това, създайте DDF (MakeCAB Descriptor) файл с вашите директиви и списъка с файлове или папки, които да бъдат включени. Дефинирайте параметри като изходна директория, тип компресия и размер на папкатаи в края поставете пътищата до файловете, които искате да пакетирате.

Опаковката се генерира с помощта на вградената помощна програма на Windows: MakeCABТипично извикване може да бъде нещо подобно makecab -f Ruta\a\tu_archivo.ddfи ще създаде .cab файла в посочената директория. Не забравяйте да проверите съдържанието с тест за разширяване. в чиста среда, преди да го интегрирате в скрипта.

Пакетен инсталатор с Windows

Пакетно писане на скриптове: Инсталиране и регистрация

Записването на случващото се по време на инсталацията е жизненоважно. Въпреки че „енджинът“ не се регистрира сам, можете да го вградите в скрипта си, като създадете лог файл на системния диск и пренасочване на стандартния изход и грешка към този файл. Нещо подобно echo и оператора >> ще направи останалото.

За монтажници . Exe които поддържат безшумен режим, можете да стартирате инсталацията със съответния ѝ параметър (например, /S или еквивалент от доставчика) и изхвърлете резултата и код за връщане (%ERRORLEVEL%) в лога. По този начин ще знаете дали всичко е минало добре, без да е необходим графичен интерфейс.

С монтажници . MSI използва се msiexecОбичайният модел е msiexec /i TuInstalador.msi /quiet (o /qn), за да се изпълни изискването за абсолютна тишина, когато скриптът се изпълнява от пакет за осигуряване. Запишете кода за изход е еднакво препоръчително.

Ако вашите двоични файлове пътуват компресирани в .cab формат, можете разгънете ги преди инсталиране с командата expand, Например, expand -r tus_activos.cab -F:* . извлича всичко в работната директория и след това ви позволява да изпълните съответната команда. setup.exe или подобни без пълни маршрути.

Стартирайте PowerShell от пакетна версия със системен контекст

Някои задачи за конфигуриране изискват PowerShell и повишени привилегии. В тези случаи можете да извикате .ps1 скрипт от вашия .bat файл използване на инструменти като PsExec за принудително активиране на системния контекст без взаимодействие. Идеята е да се изпълни нещо като: приемане на EULA, стартиране cmd.exe /c powershell.exe със сценария и пренасочване на целия изход към лога които сте използвали.

Не забравяйте, че всеки скрипт, включен в пакет за осигуряване, трябва да бъде напълно безшуменБез подкани, без прозорци, без потребителски заявки. Това важи и за PowerShell: параметризирайте добре скриптовете си, обработвайте грешки и никога не разчитайте на ръчно въвеждане.

Пакетни скриптове за тихи инсталации

Оркестриране на множество скриптове в рамките на пакет

Въпреки че механизмът за осигуряване на Windows поддържа само един команден ред на пакетНищо не пречи на тази команда да извика оркестрационен скрипт (.bat), който от своя страна последователно извиква други скриптове или инсталатори. Това е каноничният начин за инсталиране на множество приложения или за изпълнение на предварителни/последващи стъпки по подреден начин.

В конфигурацията на пакета се декларира командният ред, който извиква оркестратора, а файловете, които той ще използва, са посочени като „активни“ (самият .bat, помощните скриптове, инсталаторите, .cab и др.). По този начин, когато разположите пакета, всички ресурси се намират в една и съща временна папка. и оркестраторът може да ги препраща без абсолютни пътища.

конфигурация Примерна стойност Какво прави
Команди за осигуряване/Контекст на устройството/Команден ред cmd /c MiOrquestador.bat Извиква скрипта на оркестратора който управлява цялото съоръжение.
Команди за осигуряване/Контекст на устройството/Командни файлове MyOrchestrator.bat Основен скрипт, който регистрира и извиква инсталатори и други действия.
Команди за осигуряване/Контекст на устройството/Командни файлове Цитирани скриптове и двоични файлове Допълнителни активи: .ps1, .exe, .msi, .cab и др., използвани от оркестратора.

Осигуряване на Windows: Къде се изпълнява и какви са ограниченията

Когато добавите пакет за осигуряване при първото стартиране, скриптовете се стартират много рано при зареждане, преди да съществува потребителски контекстТова означава две неща: всичко трябва да работи безшумно и избраните инсталатори трябва да поддържат тази ранна фаза на системата.

Файловете, декларирани като CommandFile, се копират в специална временна папка за всеки пакет. За пакети, прилагани в интегрирания интерфейс, обичайният модел е нещо подобно %WINDIR%\system32\config\systemprofile\appdata\local\Temp\ProvisioningPkgTmp\{PackageGuid}\Commands\0. Това „0“ показва реда време за изпълнение (първо приложение) и се увеличава за следващите.

Ако пакетът се инсталира чрез двукратно щракване върху вече използван компютър, ресурсите ще се намират на временната папка на потребителя който изпълнява инсталацията: %TMP%\ProvisioningPkgTmp\{PackageGuid}\Commands\0Работната директория при изпълнение на командния ред ще бъде точно тази папка, така че можете да използвате относителни пътища във вашите скриптове.

Важни ограничения за ProvisioningCommands: Не е разрешено извеждане на команда към конзолата, показване на потребителски интерфейс, диалогови прозорци или помощници. Ако даден скрипт наруши тези правила, това може да причини неопределено поведение. и дори да направи компютъра неработещ; в този случай единствената оставаща опция е да го възстановите, използвайки опциите за възстановяване на системата.

Компонентът за осигуряване се опитва да изпълни скриптове възможно най-скоро въз основа на фазата, в която е добавен пакетът. Например, ако е добавен по време на експресна конфигурация, той ще се изпълни веднага след прилагане на опаковката, докато стъпките за тази конфигурация продължават. На съществуващи системи, инсталирани с двойно щракване, няма известие, че изпълнимите файлове за осигуряване са завършили.

Изпълняване на персонализирани скриптове след инсталиране на драйвери (Visual Studio)

Ако разработвате драйвери и използвате Visual Studio, можете стартирайте свои собствени командни скриптове след инсталирането на пакета с драйвери на тестовия компютър. Това се конфигурира от свойствата на проекта на пакета.

Процедурата е проста: отворете свойствата на проекта на контролера, отидете на конфигурация на контролера → разгръщане, отметнете „Активиране на внедряването“ и изберете екипа за тестване. Там можете да дефинирате „Персонализиран команден ред“ със скрипта, който ще се изпълни след завършване на инсталацията.

Освен това, в „Допълнителни файлове“ можете да включите самия скрипт и всички други инсталационни материали, които искате да копирате на отдалечения компютър. Тези файлове се копират в %SystemDrive%\drivertest\drivers от тестовия екип, откъдето можете да ги извикате с относителни пътища.

Това е удобен начин за автоматизиране на стъпките след инсталиране на драйвера: регистрация, валидации, проверки на околната средаи т.н., спестявайки време във всеки цикъл на изграждане и внедряване по време на разработка.

Inno Setup като алтернатива (или допълнение) към пакетната обработка

Ако имате нужда от пълен графичен инсталатор, Inno Setup е много мощно безплатно решение, което работи от Windows 9x до Windows 10/11 и поддържа... 64-битови инсталации и дълбока персонализацияЯдрото му е скрипт (.iss), където дефинирате метаданни, файлове, които да се включат, действия по време на инсталиране и деинсталиране, езици и др.

Типичен скрипт декларира константи с #дефинирайте за име на приложение, версия, издател, URL адрес, главен изпълним файл, име на услуга, папка за издание и инсталационна директория. Той също така настройва стила и компресията на съветника. солидна lzma, администраторски права и активирайте инсталацията в 64-битов режим с ArchitecturesInstallIn64BitMode=x64.

Критичен момент е Идентификатор на приложение (GUID): трябва да е уникален за всяко приложение. Генерирайте нов (Inno tool: Tools → Generate GUID). Ако го използвате повторно между различни проекти, инсталаторът ще третира приложението ви, сякаш е едно и също и в крайна сметка ще го „актуализира“, вместо да го инсталира отделно.

За да копирате приложението си, използвате секция, сочеща към публикуваната папка. Важно е да оставите заместващия символ в края, нещо подобно PublishFolder=...\publish\*, така че инсталаторът включете всички файлове и подпапки необходимо и можете да изключите някои (например conf.xml) ако не ви е удобно да го разпространявате.

Inno Setup ви позволява да проверявате и инсталирате зависимости. С подходящата библиотека (напр. CodeDependencies.iss) можете да извикате функция на стила Dependency_AddDotNet60Desktop за проверете или инсталирайте .NET 6 DesktopОсвен това можете да прикачите netcorecheck_x64.exe към вашия пакет за допълнителни проверки.

За услуги на Windows, в и можете да използвате %SystemRoot%\System32\sc.exe за спиране, изтриване, създаване и стартиране услугата по време на инсталиране и деинсталиране. Типичният модел е „спиране и премахване“ преди създаване, за да се избегнат остатъци от предишни версии, и след това стартирайте услугата новоинсталирано безшумно.

Други полезни подробности: добавяне на езици (напр. английски, испански, каталунски, френски, португалски), създаване преки пътища към програмната група и компилирайте с Build → Compile. За да валидирате инсталатора, отворете изходната папка (Build → Open Output Folder) и тествайте потока в виртуална машина за да не докосвате основното си оборудване.

С щателен дизайн (подредени ресурси, опционално CAB пакетиране, безшумно изпълнение, полезни лог файлове, разумна оркестрация и, ако е приложимо, инсталатор Inno Setup с .NET 6 проверка и управление на услуги), възможно е да се изгради солиден и повтаряем инсталатор с пакетна обработка, която се адаптира както към бързо внедряване, така и към сложни нужди в Windows среди.

Свързана статия:
Мултиинсталатор за приложения на Windows