Depois de concluir o desenvolvimento de um software de aplicativo, você também precisa fazer um instalador padronizado para o software .
Muitos artigos de jornais introduzem muitos métodos de uso do InstallShield e outros softwares de ferramentas para criar programas de instalação Estilo único; De fato, as várias etapas em execução do instalador são relativamente fixas, para que possamos escrever o instalador. A seguir, é apresentada uma introdução detalhada de como usar o Delphi para escrever um programa de instalação com suas próprias características de software.
Vários princípios que os instaladores precisam alcançar, como configuração única, foram introduzidos em revistas relacionadas, para que não serei descrito em detalhes. Aqui, apresentamos principalmente vários processos principais na redação do instalador:
1. Faça o programa que precisa ser instalado em arquivos de recursos
Etapa 1: Escreva o arquivo de script de recursos do Myres.RC, que pode ser escrito pelo bloco de notas, etc.
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
Etapa 2: use o BRCC32 para compilar e gerar arquivo de recursos myres.res.
BRCC32.EXE MYRES.RC
2. Escreva o código do programa de instalação
Etapa 1: adicione a instrução {$ r mymyres.res} ao arquivo setup.dpr, para que o arquivo de recursos seja incluído ao compilar o arquivo.
Etapa 2: Escreva a interface de segundo plano para instalar o programa.
// O efeito do gradiente de cor da interface é alcançado escovando blocos retangulares adjacentes em sequência com escovas de gradiente.
// A interface de instalação com outros efeitos especiais também pode ser realizada.
var i, J: Inteiro;
DCT: Trect;
Começar
Form1.WindowState: = wsMaLimized;
j: = form1.width;
// Obtenha altura de formulário
para i: = 0 a 255 fazer
// Defina um valor de cor em rgb () aqui
Começar
Canvas.brush.color: = rgb (0,0,255-i);
// A cor da escova do retângulo é desenhada toda vez (esquerda, superior, direita, inferior)
// dct: = ret (i*2,0, (i+1)*2, j);
Dct: = ret (0, i*2, j, (i+1)*3);
// área retangular para cada escova
Canvas.fillrect (DCT);
Form1.Canvas.textrect (DCT, 30,40, '' Ningbo University Courseware Management System v1.0 '');
// preenche a cor
fim;
fim;
Etapa 3: Crie o diretório de trabalho do programa principal
// Definir arquivos de ambiente e configuração do diretório
Se não o DirectoryExists (Edtdir.Text), então
// Se a MessageBox (getFocus, '' este diretório não existe, é criado? '', '' '' '' ', 1) = iDok então
tentar
Forcedirectories (edtdir.text);
exceto
MessageBox (getFocus, '' Criar diretório falhou! '', 'Information' ', 0);
Saída;
fim
// else saída;
// modalResult: = mrok;
Etapa 4: Gere o arquivo de configuração do programa principal
variável:
var
Setupinfo: Tinifile;
// Configure o caminho de trabalho de dados atual e selecione o driver relacionado ao seu sistema.
setupinfo: = tinifile.create (TRIM (FRMPATHELECT.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;
Etapa 5: Restaure os arquivos relevantes do arquivo de recursos.
variável:
var
Res: TresourceStream;
resname, resNewName: string;
Regfile: Treginifile;
Começar
// Restaurar o arquivo de banco de dados do arquivo de recursos
ResnewName: = TRIM (FRMPATHElect.edtdir.text)+''/mynbdb.mdb '';
resname: = '' mydbsrc '';
res: = TresourceStream.create (hinstance, resname, pchar ('' mydbsrcfile ''));
Res.Savetofile (resNewName);
res.Free;
// restaurar o arquivo de programa principal do arquivo de recursos
ResnewName: = TRIM (frmpathSelect.edtdir.text)+''/tnbdemo.exe '';
resname: = '' mydbapp '';
res: = TresourceStream.create (hinstance, resname, pchar ('' mydbappfile ''));
Res.Savetofile (resNewName);
res.Free;
// Escreva o nome principal do programa do programa e o nome do arquivo de execução informações no registro para que
// usado ao atualizar o programa principal.
Regfile: = Treginifile.create;
Regfile.rootkey: = hkey_local_machine;
Regfile.WritEstring ('' Software/mynb '', 'Exepath' ', Trim (resnewName));
Regfile.free;
fim
Etapa 6: Instale o driver do banco de dados (correspondente ao setp 4)
// Instalando o driver de banco de dados
var
cmdlinepchar: matriz [0..120] de char;
startupinfo: tstartupinfo;
ProcessInfo: TprocessInformation;
Começar
screen.cursor: = CRHOURGLASS;
strpCopy (cmdlinepchar, acabamento (frmpathleclect.edtdir.text)+'' /mdac_typ.exe /q '');
FILLCHAR (startupinfo, sizeof (startupinfo),#0);
com startupinfo fazer
Começar
cb: = sizeof (startupinfo);
dwflags: = startf_useshowwindow ou startf_usestdhandles;
wshowwindow: = sw_hide;
fim;
Se CreateProcess (nil, cmdlinepchar, nil, nil, true, 0, nil, nil, startupinfo, processinfo) então
// Crie um processo
Começar
waitforsingleObject (ProcessInfo.hProcess, Infinite);
fim
outro
Começar
saída;
fim;
screen.cursor: = crDefault;
Deletefile (PCHO (TRIM (FRMPATHElect.edtdir.text)+''/mdac_typ.exe ''));
fim;
Etapa 7: Crie um grupo de programas
variável:
var
smacro: string;
Szmacro: Array [0..254] de Char;
sgroupdesc, sgroupName: string;
Sprogdesc: string;
sprogicon: string;
// Crie o grupo de programas principal
// Abra o canal de diálogo
Se ddeclientConv1.openLink então
Começar
// Crie um grupo
sgroupdesc: = '' Sistema de gerenciamento de cursos da Universidade Ningbo '';
sgroupName: = '' Ningbo University Courseware Management System v1.0 '';
// Faça uma macro
smacro: = '' [createGroup (''+sgroupdesc+'', ''+sgroupName+'')] '';
strpcopy (szmacro, smacro);
ddeclientConv1.Executemacro (szmacro, false);
// Crie imagem de ícone
SPROGICON: = TRIM (FRMPATHElect.edtdir.text)+''/tnbdemo.exe '' ;;
SPOGDESC: = '' Sistema de Gerenciamento de Course de Curso da Universidade Ningbo '';
smacro: = '' [additem (''+sprogicon+'', ''+sprogdesc+'' '')] '';
strpcopy (szmacro, smacro);
ddeclientConv1.Executemacro (szmacro, falso);
ddeclientConv1.ClosElink;
fim;
Etapa 8: Crie um atalho de mesa
// usa shlobj, comobj, ActiveX;
var
tmpobject: iunknown;
tmpslink: ishelllink;
TMPPFILE: IPERSISTFILE;
Pidl: pitemidlist;
StartupDirectory: matriz [0..max_path] de char;
StartupFileName: string;
LinkFilename: wideString;
C1: Thandle;
Começar
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), false);
c1: = windows.findwindowex (windows.findwindowex (windows.findwindow ('' progman '', '' gerente de programa ''), 0, '' shelldll_defview '', '' ''), 0, 'syslistView32' ',' '' '');
PostMessage (C1, WM_KEYdown, VK_F5,0);
PostMessage (C1, WM_KEYUP, VK_F5,1 SHL 31);
fim;
Etapa 9: reinicie a máquina
Começar
Exitwindowsex (2,0);
fim;
O exposto acima é a parte principal parte do programa, que foi cortada do meu sistema de desenvolvimento e usada algumas chamadas de API WIN. Durante o processo de instalação, você pode fazer algumas interfaces rápidas e cada etapa de acordo com suas necessidades.