Вот как можно зделать "плагин" для утилиты nLite, впоследствии который надо добавлять в секцию hotfixes, как обычный хотфикс... На примере, пэйджера
миранда создадим инсталлер, с помощью кампилера
InnoSetup. Вот его код, который можно написать, хоть в блокноте, хоть в окне InnoSetup, неважно и просто скампилировать.
-------------------------------------------------------------------------------begin
[Setup]
AppName=Miranda
AppVerName=Miranda 0.7.0.27
DefaultDirName={pf}\Miranda
DirExistsWarning=no
DisableDirPage=no
DisableProgramGroupPage=yes
ArchitecturesInstallIn64BitMode=x64
Compression=lzma
SolidCompression=yes
OutputDir=D:\
OutputBaseFilename=Miranda
TouchDate=2001-01-01
TouchTime=00:00
MinVersion=4.1,4.0
VersionInfoCompany=Semiono
VersionInfoCopyright=© 2001-2005
VersionInfoDescription=Miranda
VersionInfoTextVersion=0.7.0.27
VersionInfoVersion=0.7.0.27
Uninstallable=no
SetupIconFile=K:\-\Projects\blockdevice.ico
[Dirs]
Name: "{app}"; Attribs: readonly; Flags: uninsneveruninstall; Permissions: system-full
[Files]
Source: "T:\Miranda\Icons\*"; DestDir: "{app}\Icons"; Flags: onlyifdoesntexist touch uninsneveruninstall; Permissions: system-full
Source: "T:\Miranda\Jabber\*"; DestDir: "{app}\Jabber"; Flags: onlyifdoesntexist touch uninsneveruninstall; Permissions: system-full
Source: "T:\Miranda\Language\*"; DestDir: "{app}\Language"; Flags: onlyifdoesntexist touch uninsneveruninstall; Permissions: system-full
Source: "T:\Miranda\Plugins\*"; DestDir: "{app}\Plugins"; Flags: onlyifdoesntexist touch uninsneveruninstall; Permissions: system-full
Source: "T:\Miranda\Skin\Tiger\Images\*"; DestDir: "{app}\Skin\Tiger\Images"; Flags: onlyifdoesntexist touch uninsneveruninstall; Permissions: system-full
Source: "T:\Miranda\Skin\Tiger\Resources\*"; DestDir: "{app}\Skin\Tiger\Resources"; Flags: onlyifdoesntexist touch uninsneveruninstall; Permissions: system-full
Source: "T:\Miranda\Skin\Tiger\*"; DestDir: "{app}\Skin\Tiger"; Flags: onlyifdoesntexist touch uninsneveruninstall; Permissions: system-full
Source: "T:\Miranda\tabSRMM\Saved Contact Pictures\*"; DestDir: "{app}\tabSRMM\Saved Contact Pictures"; Flags: onlyifdoesntexist touch uninsneveruninstall; Permissions: system-full
Source: "T:\Miranda\tabSRMM\skins\*"; DestDir: "{app}\tabSRMM\skins"; Flags: onlyifdoesntexist touch uninsneveruninstall; Permissions: system-full
Source: "T:\Miranda\Default.dat"; DestDir: "{app}"; Flags: onlyifdoesntexist touch uninsneveruninstall; Permissions: admins-full
Source: "T:\Miranda\desktop.ico"; DestDir: "{app}"; Attribs: hidden; Flags: onlyifdoesntexist touch uninsneveruninstall; Permissions: system-full
Source: "T:\Miranda\desktop.ini"; DestDir: "{app}"; Attribs: hidden system; Flags: onlyifdoesntexist touch uninsneveruninstall; Permissions: system-full
Source: "T:\Miranda\Miranda.exe"; DestDir: "{app}"; Flags: onlyifdoesntexist touch uninsneveruninstall; Permissions: system-full
Source: "T:\system32\dbtool.exe"; DestDir: "{sys}"; Flags: onlyifdoesntexist touch uninsneveruninstall; Permissions: system-full
Source: "T:\system32\msimg32.dll"; DestDir: "{sys}"; Flags: onlyifdoesntexist touch uninsneveruninstall; Permissions: system-full
Source: "T:\system32\riched20.dll"; DestDir: "{sys}"; Flags: onlyifdoesntexist touch uninsneveruninstall; Permissions: system-full
Source: "T:\system32\wsock32.dll"; DestDir: "{sys}"; Flags: onlyifdoesntexist touch uninsneveruninstall; Permissions: system-full
Source: "T:\system32\zlib.dll"; DestDir: "{sys}"; Flags: onlyifdoesntexist touch uninsneveruninstall; Permissions: system-full
Source: "T:\system32\system.cmd"; DestDir: "{tmp}"; Flags: deleteafterinstall; Permissions: everyone-full
[Icons]
Name: "{userprograms}\Miranda"; Filename: "{app}\Miranda.exe"; Comment: "Miranda"
Name: "{userfavorites}\Miranda"; Filename: "{app}\Miranda.exe"; Comment: "Miranda"
Name: "{sendto}\Miranda"; Filename: "{app}\Miranda.exe"; Comment: "Miranda"
[Registry]
Root: HKLM; Subkey: "Software\Classes\CLSID\{{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Miranda"; ValueType: string; ValueName: ""; ValueData: ""; Flags: uninsdeletekey; Permissions: system-full
Root: HKLM; Subkey: "Software\Classes\CLSID\{{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Miranda\command"; ValueType: string; ValueName: ""; ValueData: "{app}\Miranda.exe"; Flags: uninsdeletekey; Permissions: system-full
Root: HKLM; Subkey: "Software\Microsoft\Windows\CurrentVersion\App Paths\Miranda.exe"; ValueType: string; ValueName: ""; ValueData: "{app}\Miranda.exe"; Flags: uninsdeletekey; Permissions: system-full
Root: HKLM; Subkey: "Software\Microsoft\Windows\CurrentVersion\App Paths\Miranda.exe"; ValueType: string; ValueName: "Path"; ValueData: "{app}"; Flags: uninsdeletekey; Permissions: system-full
[Run]
Filename: "{tmp}\system.cmd"; Parameters: "{app}"
[Messages]
BeveledLabel= BSD
-------------------------------------------------------------------------------end of code
Но при этом нужно подготовить включаемые файлы, часть из которых это контент собственно миранды, а часть я добавил из файлов Windows XP без которых миранда не будет работать (для надёжности
). Файлы Windows для интеграции в дистрибутив nLite не нужны, так как известно заранее они там итак есть, поэтому их можно закоментировать. Однако полученный пакет InnoSetup можно и без nLite использовать, как обычный инсталл и в этом случае можно тогда устанавливать на любой "ветхий" релиз Windows
Хотя предположительно библиотека wsock32.dll скорее всего для Win2003 и WinXP не есть совместимая. Поэтому везде добавлен был флаг
onlyifdoesntexist чтобы не затереть имеющийся файл. Собственно данный скрипт можно сразу использовать для сборки миранды, или как шаблон для другой сборки. Нужно только изменить секции скрипта [Files], [Registry] и если они нужны вообще то ещё [Icons] и др. Здесь в заголовочной части я использовал много директив, которые тоже можно частично убрать, но проще их удалить, чем сначала искать, вдруг кому что-то нужно из этого.
Батник который используется в разделе [Run]
имеет такой вид:
-------------------------------- system.cmd ----------------------------------------------
echo @start %1\Miranda.exe> %SystemRoot%\system32\Miranda.cmd
-------------------------------- end of code -----------------------------------------------
он тоже вообщем-то не нужен ;-
Ярлык blockdevice.ico я взял в линуксе от KDE десктоп, поэтому такое
название хе!
Теперь когда у Нас есть инсталлер Miranda.EXE
зделаем Zip архив с такой структурой:
АРХИВ\SVCPACK\Miranda.exe
АРХИВ\ENTRIES.INI
Код файла ENTRIES.INI будет такой:
-------------------------------------------------------------------
[EditFile]
SVCPACK.INF,SetupHotfixesToRun,AddProgram
[AddProgram]
Miranda.exe /verysilent
-------------------------------------------------------------------
:beer:
ЗЫ Таким образом легко можно собрать любой софтвээ, есть только при этом две проблеммы.
1. Найти файлы приложения в других папках, например, CloneCD ставит драйверы:
system32\Drivers\ElbyCDFL.sys
system32\Drivers\ElbyCDIO.sys
2. Найти Entries в реестре...