Après avoir terminé le développement d'un logiciel d'application, vous devez également créer un installateur standardisé pour le logiciel. .
De nombreux articles de journaux introduisent de nombreuses méthodes d'utilisation du logiciel InstallShield et d'autres programmes d'installation. style unique; En fait, les plusieurs étapes en cours d'exécution du programme d'installation sont relativement fixes, nous pouvons donc écrire le programme d'installation nous-mêmes. Ce qui suit est une introduction détaillée à la façon d'utiliser Delphi pour écrire un programme d'installation avec ses propres caractéristiques logicielles.
Plusieurs principes que les installateurs doivent atteindre, comme une configuration unique, ont été introduits dans des magazines connexes, donc je ne serai pas décrit en détail. Ici, nous introduisons principalement plusieurs processus principaux dans l'écriture du programme d'installation: nous
1. Faites le programme qui doit être installé dans des fichiers de ressources
Étape 1: Écrivez le fichier de script de ressource myres.rc, qui peut être écrit par le bloc-notes, etc.
Mydbsrc mydbsrcfile c: /resdemo/mynbdb.mdb
Mydbjet mydbjetfile c: /resdemo/mdac_typ.exe
Mydbapp mydbappfile c: /resdemo/tnbdemo.exe
7001 icône c: /resdemo/setup.ico
Étape 2: Utilisez BRCC32 pour compiler et générer des fichiers de ressources myres.res.
BRCC32.exe myres.rc
2. Écrivez le code du programme d'installation
Étape 1: Ajoutez l'instruction {$ r mymyres.res} au fichier setup.dpr, afin que le fichier de ressource soit inclus lors de la compilation du fichier.
Étape 2: Écrivez l'interface d'arrière-plan pour l'installation du programme.
// L'effet de gradient de couleur de l'interface est obtenu en brossant les blocs rectangulaires adjacents en séquence avec des pinceaux à gradient.
// L'interface d'installation avec d'autres effets spéciaux peut également être réalisée.
var i, j: entier;
DCT: Trect;
Commencer
form1.windowstate: = wsMaximized;
j: = form1.width;
// Obtenez la hauteur du formulaire
pour i: = 0 à 255 do
// Définissez une valeur de couleur dans RVB () ici
Commencer
Canvas.brush.color: = rgb (0,0,255-i);
// La couleur du pinceau du rectangle est dessinée à chaque fois (gauche, haut, droite, bas)
// dct: = rect (i * 2,0, (i + 1) * 2, j);
Dct: = rect (0, i * 2, j, (i + 1) * 3);
// zone rectangulaire pour chaque brossage
Canvas.Fillrect (DCT);
Form1.Canvas.Textrect (DCT, 30,40, '' Ningbo University Course System System V1.0 '');
// Remplissez la couleur
fin;
fin;
Étape 3: Créez le répertoire de travail principal du programme principal
// Définir l'environnement du répertoire et les fichiers de configuration
Si pas DirectoryExists (edtdir.text) alors
// Si MessageBox (getFocus, '' Ce répertoire n'existe pas, est-ce créé? '', '', '' Question '', 1) = idok alors
essayer
ForceDirectries (edtdir.Text);
sauf
MessageBox (getFocus, '' Créer un répertoire a échoué! '', '' Information '', 0);
Sortie;
fin
// else sort;
// modalResult: = MROK;
Étape 4: générer le fichier de configuration du programme principal
variable:
var
setupinfo: tinifile;
// Configurez le chemin de travail actuel des données et sélectionnez le pilote lié à votre système.
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;
Étape 5: Restaurez les fichiers pertinents du fichier de ressources.
variable:
var
Res: Tresourcestream;
resname, resNewName: String;
Regfile: Treginifile;
Commencer
// restaurer le fichier de base de données à partir du fichier de ressources
resNewName: = TRIM (frmpathSelect.edtdir.Text) + '' / mynbdb.mdb '';
resname: = '' mydbsrc '';
res: = tresourcestream.create (hinstance, resname, phar ('' mydbsrcfile ''));
res.savetofile (resnewname);
res.free;
// Restaurez le fichier du programme principal à partir du fichier de ressources
resNewName: = TRIM (frmpathSelect.edtdir.Text) + '' / tnbdemo.exe '';
resname: = '' mydbapp '';
res: = tresourcestream.create (hinstance, resname, phar ('' mydbappfile ''));
res.savetofile (resnewname);
res.free;
// Écrivez le nom principal du trajet du programme et les informations sur le nom du fichier d'exécution dans le registre afin que
// utilisé lors de la mise à niveau du programme principal.
RegFile: = Treginifile.Create;
RegFile.rootKey: = HKEY_LOCAL_MACHINE;
RegFile.WriteString ('' Software / MYNB '', '' exepath '', Trim (resNewName));
RegFile.Free;
fin
Étape 6: Installez le pilote de base de données (correspondant à SETP 4)
// Installation du pilote de base de données
var
CMDLINEPCHAR: Array [0..120] de Char;
StartupInfo: tStartupinfo;
processInfo: tprocessInformation;
Commencer
Screen.Cursor: = Crhourglass;
strpcopy (cmdlinepchar, trim (frmpathselect.edtdir.text) + '' / mdac_typ.exe / q '');
Fillchar (startupInfo, sizeof (startupinfo), # 0);
avec startupinfo faire
Commencer
cb: = sizeof (startupInfo);
dwflags: = startf_useshowwindow ou startf_usestdhandles;
wshowwindow: = sw_hide;
fin;
Si CreateProcess (NIL, CMDLINEPCHAR, NIL, NIL, TRUE, 0, NIL, NIL, STARPINFO, ProcessInfo)
// Créer un processus
Commencer
waitForsingleObject (processInfo.hprocess, infinie);
fin
autre
Commencer
sortie;
fin;
Screen.Cursor: = Crdefault;
DeleteFile (pChar (Trim (frmpathSelect.edtdir.Text) + '' / mdac_typ.exe ''));
fin;
Étape 7: Créer un groupe de programmes
variable:
var
Smacro: String;
Szmacro: Array [0..254] de char;
sgroupDesc, sgroupName: String;
SprogDesc: String;
Sprogicon: String;
// Créer le groupe de programmes principal
// Ouvre le canal de dialogue
Si ddeclientconv1.openlink alors
Commencer
// Créer un groupe
SGROUPDESC: = '' Ningbo University Coursewicy System '';
SGROUPNAME: = '' Ningbo University Course Système de gestion des logiciels v1.0 '';
// Faire une macro
Smacro: = '' [CreateGroup ('' + sgroupDesc + '', '' + sgroupname + '')] '';
strpcopy (szmacro, smacro);
ddeclientConv1.execUpemacro (szmacro, false);
// Créer une image d'icône
Sprogicon: = TRIM (frmpathSelect.edtdir.Text) + '' / tnbdemo.exe '' ;;
Sprogdescs: = '' Ningbo University Coursewicy System '';
smacro: = '' [additem ('' + sprogicon + '', '' + sprogdesc + '')] '';
strpcopy (szmacro, smacro);
ddeclientConv1.execureMacro (szmacro, false);
ddeclientconv1.closeLink;
fin;
Étape 8: Créez un raccourci de bureau
// utilise Shlobj, ComObj, ActiveX;
var
tmpObject: iunknown;
TMPSLINK: IshellLink;
TMPPFILE: IPERSISTFILE;
Pidl: Pitemidlist;
StartupDirectory: array [0..max_path] de char;
StartupFileName: String;
LinkFileName: Welsestring;
C1: Thandle;
Commencer
StartupFileName: = '' '' tnbdemo.exe '' '' ';
tmpObject: = createComObject (clsid_shellLink);
tmpslink: = tmpObject as IshellLink;
TMPPFILE: = TMPObject en tant qu'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 '', '' Program Manager ''), 0, 'shelldll_defview' ',' '' '), 0,' 'SyslistView32' ' ',' '' '');
PostMessage (C1, WM_KeyDown, VK_F5,0);
PostMessage (C1, WM_KEYUP, VK_F5,1 SHL 31);
fin;
Étape 9: Redémarrez la machine
Commencer
EXITWINDOWSEX (2,0);
fin;
Ce qui précède est la partie principale du programme, qui a été coupée de mon système de développement et a utilisé des appels API WIN. Pendant le processus d'installation, vous pouvez effectuer des interfaces rapides et chaque étape en fonction de vos besoins.