Después de completar el desarrollo de un software de aplicación, también debe hacer un instalador estandarizado para el software. .
Muchos artículos de periódicos introducen muchos métodos para usar InstallShield y otro software de herramientas para crear programas de instalación. estilo único; De hecho, los varios pasos de ejecución del instalador son relativamente fijos, por lo que podemos escribir el instalador nosotros mismos. La siguiente es una introducción detallada a cómo usar Delphi para escribir un programa de instalación con sus propias características de software.
Se han introducido varios principios que los instaladores deben lograr, como la configuración única, en revistas relacionadas, por lo que no se describiré en detalle. Aquí presentamos principalmente varios procesos principales en la redacción del instalador:
1. Haga el programa que debe instalarse en archivos de recursos
Paso 1: Escriba el archivo de script de recursos myres.rc, que puede ser escrito por bloc de notas, etc.
Mydbsrc mydbsrcfile c: /resdemo/mynbdb.mdb
MydbJet mydbJetfile c: /resdemo/mdac_typ.exe
Mydbapp mydbappfile c: /resdemo/tnbdemo.exe
7001 ícono c: /resdemo/setup.ico
Paso 2: Use BRCC32 para compilar y generar archivos de recursos myres.res.
brcc32.exe myres.rc
2. Escriba el código del programa de instalación
Paso 1: Agregue la instrucción {$ R mymyres.res} al archivo setup.dpr, de modo que el archivo de recursos se incluya al compilar el archivo.
Paso 2: Escriba la interfaz de fondo para instalar el programa.
// El efecto de gradiente de color de la interfaz se logra cepillando bloques rectangulares adyacentes en secuencia con cepillos de gradiente.
// La interfaz de instalación con otros efectos especiales también se puede realizar.
var i, j: entero;
DCT: Trect;
Comenzar
form1.WindowState: = wSmaximized;
j: = form1.width;
// Obtener la altura de formulario
para i: = 0 a 255 hacer
// establece un valor de color en rgb () aquí
Comenzar
Canvas.Brush.Color: = RGB (0,0,255-i);
// El color del pincel del rectángulo se dibuja cada vez (izquierda, arriba, derecha, abajo)
// dct: = rect (i*2,0, (i+1)*2, j);
Dct: = rect (0, i*2, j, (i+1)*3);
// área rectangular para cada cepillado
Canvas.fillrect (DCT);
Form1.canvas.textrect (DCT, 30,40, '' Ningbo University Courseware Management System v1.0 '');
// Color de llenado
fin;
fin;
Paso 3: cree el directorio de trabajo del programa principal
// Establecer el entorno de directorio y los archivos de configuración
Si no es DirectoryExists (edtdir.text) entonces
// if MessageBox (getFocus, '' Este directorio no existe, ¿se crea? '', '', '' Pregunta '', 1) = Idok entonces
intentar
Foredirectorios (edtdir.text);
excepto
MessageBox (getFocus, '' Crear directorio fallido! '', '' Información '', 0);
Salida;
fin
// else salga;
// modalResult: = mROK;
Paso 4: Genere el archivo de configuración del programa principal
variable:
varilla
setupinfo: tinifile;
// Configure la ruta de trabajo de datos actual y seleccione el controlador relacionado con su sistema.
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;
Paso 5: Restaurar los archivos relevantes del archivo de recursos.
variable:
varilla
RES: TresourCstream;
resname, resnewname: string;
RegFile: Treginifile;
Comenzar
// restaurar el archivo de la base de datos desde el archivo de recursos
resnewname: = trim (frmpathselect.edtdir.text)+'' '/mynbdb.mdb' ';
resname: = '' mydbsrc '';
Res: = TresourCestream.Create (Hinstance, Resname, Pchar ('' myDBSRCFile ''));
res.savetofile (resnewname);
Res.Free;
// restaurar el archivo del programa principal desde el archivo de recursos
resnewname: = trim (frmpathselect.edtdir.text)+'' '/tnbdemo.exe' ';
resname: = '' mydbapp '';
Res: = TresourCstream.Create (HinStance, Resname, Pchar ('' myDBAppFile ''));
res.savetofile (resnewname);
Res.Free;
// Escribe la información del nombre del nombre de la ruta del programa principal y la información del nombre del archivo de ejecución en el registro para que
// utilizado al actualizar el programa principal.
Regfile: = treginifile.create;
Regfile.rootkey: = hkey_local_machine;
Regfile.writeString ('' Software/Mynb '', '' Exepath '', TRIM (resnewName));
RegFile.Free;
fin
Paso 6: Instale el controlador de la base de datos (correspondiente a SETP 4)
// Instalación del controlador de la base de datos
varilla
cmdlinepchar: array [0..120] de char;
startupInfo: tStartUpinfo;
ProcessInfo: TProcessInformation;
Comenzar
screen.cursor: = crhourglass;
strpCopy (cmdlinepchar, trim (frmpathselect.edtdir.text)+'' ' /mdac_typ.exe /q' ');
Fillchar (startupInfo, sizeOf (startupinfo),#0);
con startupinfo do
Comenzar
CB: = sizeof (startupInfo);
dwflags: = startf_useshowwindow o startf_usestdhandles;
whowwindow: = sw_hide;
fin;
Si CreateProcess (nil, cmdlinepchar, nil, nil, true, 0, nil, nil, startupinfo, processinfo) entonces
// crear un proceso
Comenzar
WaitForSingleObject (processInfo.hprocess, infinito);
fin
demás
Comenzar
salida;
fin;
Screen.cursor: = CRDefault;
Deletefile (pchar (trim (frmpathselect.edtdir.text)+'' '/mdac_typ.exe' ');
fin;
Paso 7: crear un grupo de programas
variable:
varilla
Smacro: cadena;
szmacro: matriz [0..254] de char;
sgroupDesc, sgroupname: string;
sprogdesc: string;
Sprogicon: cadena;
// Crear el grupo principal de programas
// Abra el canal de diálogo
Si dDeclientConv1.openlink entonces
Comenzar
// crear un grupo
SgroupDesc: = '' Sistema de gestión de cursos de la Universidad Ningbo '';
SgroupName: = '' Ningbo University Courseware System v1.0 '';
// hacer una macro
smacro: = '' [CreateGroup (''+sgroupDesc+'', ''+sgroupname+'' ')]';
strpcopy (szmacro, smacro);
ddeclientConv1.Executemacro (SzMacro, falso);
// Crear imagen de icono
sprogicon: = trim (frmpathselect.edtdir.text)+'' '/tnbdemo.exe' ';;
sprogdesc: = '' Sistema de gestión de cursos de la Universidad Ningbo '';
smacro: = '' [addItem (''+sprogicon+'', ''+sprogdesc+'')] '';
strpcopy (szmacro, smacro);
dDeclientConv1.executemacro (szmacro, falso);
dDeclientConv1.Closelink;
fin;
Paso 8: Crea un atajo de escritorio
// usa shlobj, comobj, activeX;
varilla
tmpobject: iunknown;
tmpslink: ishelllink;
tmppfile: ipersistfile;
Pidl: Pitemidlist;
StartupDirectory: array [0..max_path] de char;
StartupFileName: string;
LinkFileName: WideString;
C1: Thandle;
Comenzar
StartupFileName: = '' '' tnbdemo.exe '' '' ';
tmpobject: = createComObject (clsid_shelllink);
tmpslink: = tmpobject como ishelllink;
tmppFile: = tmPObject como 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), falso);
c1: = windows.findwindowex (windows.findwindowex (windows.findwindow ('' progman '', '' administrador de programas ''), 0, '' shelldll_defview '', '' ''), 0, '' syslistview32 ' ',' '' '');
PostMessage (C1, WM_Keydown, VK_F5,0);
PostMessage (C1, WM_Keyup, VK_F5,1 SHL 31);
fin;
Paso 9: Reinicie la máquina
Comenzar
ExitWindowsex (2,0);
fin;
Lo anterior es la parte principal de la declaración del programa, que se eliminó de mi sistema de desarrollo y usó algunas llamadas de API de ganar. Durante el proceso de instalación, puede hacer algunas interfaces rápidas y cada paso de acuerdo con sus necesidades.