После того, как вы завершите разработку прикладного программного обеспечения, вам также необходимо сделать стандартизированный установщик для программного обеспечения Полем
Многие газетные статьи представляют множество методов использования InstallShield и другого программного обеспечения для создания программ установки Одиночный стиль не может гибко контролировать методы запуска и ярлыки. На самом деле, несколько выполняющих этапов установщика являются относительно фиксированными, поэтому мы можем написать установщик сами. Ниже приведено подробное введение в то, как использовать Delphi для написания программы установки с собственными характеристиками программного обеспечения.
Несколько принципов, которые необходимы для установщиков, такие как одноразовая конфигурация, были введены в соответствующих журналах, поэтому я не буду подробно описан. Здесь мы в основном представляем несколько основных процессов в написании установщика:
1. Сделайте программу, которая необходимо установить в файлы ресурсов
Шаг 1: Напишите файл сценария ресурсов Myres.rc, который может быть записан блокнотом и т. Д.
Mydbsrc mydbsrcfile c: /resdemo/mynbdb.mdb
Mydbjet mydbjetfile c: /resdemo/mdac_typ.exe
Mydbapp mydbappfile c: /resdemo/tnbdemo.exe
7001 Icon C: /resdemo/setup.ico
Шаг 2: Используйте BRCC32, чтобы компилировать и генерировать файл ресурсов Myres.res.
brcc32.exe myres.rc
2. Напишите код программы установки
Шаг 1: Добавьте оператор {$ r mymyres.res} в файл setup.dpr, чтобы файл ресурса был включен при составлении файла.
Шаг 2: Напишите фоновый интерфейс для установки программы.
// Эффект градиента интерфейса достигается путем чистки соседних прямоугольных блоков последовательно с градиентными щетками.
// также можно реализовать интерфейс установки с другими спецэффектами.
var i, j: целое число;
DCT: TRECT;
Начинать
form1.windowstate: = wsmaximized;
J: = form1.width;
// Получить высоту формы
для i: = от 0 до 255
// Установить значение цвета в rgb () здесь
Начинать
Canvas.brush.color: = rgb (0,0,255-I);
// Цвет щетки прямоугольника рисуется каждый раз (слева, вверху, справа, внизу)
// dct: = rect (i*2,0, (i+1)*2, j);
Dct: = rect (0, i*2, j, (i+1)*3);
// прямоугольная область для каждой чистки
Canvas.fillrect (dct);
Form1.canvas.textrect (DCT, 30,40, '' 'Система управления курсом Университета Нинбо v1.0' ');
// заполнить цвет
конец;
конец;
Шаг 3: Создайте основную программу рабочего каталога
// Установить среда каталогов и файлы конфигурации
Если не DirectoryExists (edtdir.text), то тогда
// Если MessageBox (getFocus, '' этого каталога не существует, он создан?
пытаться
УДАЛЕНИЯ (EDTDIR.Text);
кроме
MessageBox (getFocus, '' Create Directory не удастся! '', '' Information '', 0);
Выход;
конец
// еще выход;
// MODALRESULT: = MROK;
Шаг 4: Сгенерируйте основной файл конфигурации программы
переменная:
вар
setupinfo: tinifile;
// Настройка текущего рабочего пути данных и выберите драйвер, связанный с вашей системой.
setupinfo: = tinifile.create (trim (frmpathselect.edtdir.text)+''/setup.ini '');
setupinfo.writestring ('' 'access' ',' 'workdbpath' ', trim (frmpathselect.edtdir.text)+' '/mynbdb.mdb' ';
setupinfo.writestring ('' 'access' ',' 'backdbpath' ', trim (frmpathselect.edtdir.text)+' '/mynbdbbak.mdb' ');
setupinfo.free;
Шаг 5: Восстановите соответствующие файлы из файла ресурса.
переменная:
вар
Res: Tresourcestream;
Resname, Resnewname: String;
Regfile: Treginifile;
Начинать
// восстановить файл базы данных из файла ресурса
resnewName: = trim (frmpathSelect.edtdir.text)+''/mynbdb.mdb '';
resname: = '' mydbsrc '';
res: = tresourcestream.create (hinstance, resname, pchar ('' mydbsrcfile '' '));
res.savetofile (resnewname);
res.free;
// Восстановите основной файл программы из файла ресурса
resnewName: = trim (frmpathSelect.edtdir.text)+''/tnbdemo.exe '';
resname: = '' mydbapp '';
res: = tresourcestream.create (hinstance, resname, pchar ('' mydbappfile '' '));
res.savetofile (resnewname);
res.free;
// Написать основное имя пути пути и имени файла проведения в реестре, чтобы, чтобы, чтобы, чтобы
// используется при обновлении основной программы.
Regfile: = treginifile.create;
Regfile.rootkey: = hkey_local_machine;
Regfile.writestring ('' software/mynb '', '' exepath '', trim (resnewname));
Regfile.free;
конец
Шаг 6: Установите драйвер базы данных (соответствующий SETP 4)
// Установка драйвера базы данных
вар
cmdlinepchar: массив [0..120] char;
Startupinfo: tStartupinfo;
ProcessInfo: tprocessinformation;
Начинать
Screen.cursor: = Crhourglass;
strpcopy (cmdlinepchar, trim (frmpathselect.edtdir.text)+'' /mdac_typ.exe /q '');
Fillchar (Startupinfo, sizeof (Startupinfo),#0);
С Startupinfo Do
Начинать
cb: = sizeof (startupinfo);
dwflags: = startf_useshowwindow или startf_usestdhandles;
WSHOWWINDOW: = SW_HIDE;
конец;
Если CreateProcess (nil, cmdlinepchar, nil, nil, true, 0, nil, nil, startupinfo, processinfo) тогда
// Создать процесс
Начинать
waitForsingleObject (ProcessInfo.hprocess, Infinite);
конец
еще
Начинать
Выход;
конец;
screen.cursor: = crdefault;
Deletefile (pchar (trim (frmpathselect.edtdir.text)+''/mdac_typ.exe ''));
конец;
Шаг 7: Создать группу программы
переменная:
вар
SMACRO: String;
Szmacro: массив [0..254] из Чар;
sgroupdesc, sgroupName: String;
Sprogdesc: String;
Sprogicon: String;
// Создать основную группу программы
// Откройте канал диалога
Если ddeclientconv1.openlink, тогда
Начинать
// Создать группу
sgroupdesc: = '' 'Система управления курсом Ningbo University' ';
sgroupName: = '' 'Система управления курсом Ningbo University World v1.0' ';
// Сделать макрос
SmaCro: = '' [createGroup (''+sgroupDesc+'', ''+sgroupName+'')] '';
strpcopy (szmacro, smacro);
ddeclientconv1.executemacro (szmacro, false);
// Создать изображение значка
sprogicon: = trim (frmpathselect.edtdir.text)+''/tnbdemo.exe '' ;;
sprogdesc: = '' Система управления курсом Университета Нинбо '';
SmaCro: = '' [additem (''+sprogicon+'', ''+sprogdesc+'')] '';
strpcopy (szmacro, smacro);
ddeclientconv1.executemacro (szmacro, false);
ddeclientconv1.closelink;
конец;
Шаг 8: Создайте сочетание рабочего стола
// использует shlobj, comobj, activex;
вар
tmpobject: iunknown;
tmpslink: ishelllink;
tmppfile: ipersistfile;
PIDL: Pitemidlist;
StartupDirectory: Array [0..max_Path] char;
StartupFileName: String;
Linkfilename: WealString;
C1: Тандл;
Начинать
StartupFileName: = '' '' tnbdemo.exe '' '' ';
tmpobject: = createcomobject (clsid_shelllink);
tmpslink: = tmpobject как ishelllink;
tmppfile: = tmpobject как ipersistfile;
tmpslink.setpath (pchar (StartupFilename));
tmpslink.setworkingDirectory (pchar (ExtractFilePath (StartupFilename)));
Shgetspecialfolderlocation (0, csidl_desktopdirectory, pidl);
ShgetPathFromidList (pidl, StartupDirectory);
Linkfilename: = startupDirectory + '' /mynotepad.lnk '';
ShowMessage (LinkFileName);
tmppfile.save (pwchar (linkfilename), false);
c1: = windows.findwindowex (windows.findwindowex (windows.findwindow ('' progman '', '' Manager '' '), 0,' 'welldll_defview' ',' '' '), 0,' 'syslistview32' ',' '' '');
Postmessage (C1, WM_Keydown, VK_F5,0);
PostMessage (C1, WM_Keyup, VK_F5,1 SHL 31);
конец;
Шаг 9: Перезагрузите машину
Начинать
Exitwindowsex (2,0);
конец;
Вышеуказанное является основной частью программы, которая была вырезана из моей системы разработки и использовала некоторые вызовы API WIN. Во время процесса установки вы можете сделать несколько быстрых интерфейсов, и каждый шаг в соответствии с вашими потребностями.