애플리케이션 소프트웨어의 개발을 완료하면 소프트웨어에 대한 표준화 된 설치 프로그램도 작성해야합니다 .
많은 신문 기사는 설치 프로그램을 사용하여 설치 프로그램을 생성하는 많은 방법을 소개합니다 단일 스타일; 유연하게 스타트 업 방법과 바로 가기. 실제로 설치 프로그램의 여러 실행 단계는 비교적 고정되어 있으므로 설치자를 직접 쓸 수 있습니다. 다음은 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 아이콘 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, ''Ningbo University 코스웨어 관리 시스템 v1.0 '');
// 색상을 채우십시오
끝;
끝;
3 단계 : 기본 프로그램 작업 디렉토리 작성
// 디렉토리 환경 및 구성 파일을 설정합니다
DirectoryExists (edtdir.text)가 아닌 경우
// MessageBox (getFocus,``이 디렉토리가 존재하지 않습니까? '', '', ''Question '', 1) = idok 그러면
노력하다
강제 교사 (edtdir.text);
제외하고
MessageBox (GetFocus,``디렉토리 만들기 실패! '', ''Information '', 0);
출구;
끝
// 다른 종료;
// modalresult : = mrok;
4 단계 : 기본 프로그램 구성 파일을 생성합니다
변하기 쉬운:
var
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 단계 : 리소스 파일에서 관련 파일을 복원합니다.
변하기 쉬운:
var
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에 해당)
// 데이터베이스 드라이버 설치
var
cmdlinepchar : char의 배열 [0..120];
startupinfo : tstartupinfo;
ProcessInfo : tprocessinformation;
시작하다
screen.cursor : = crhourglass;
strpcopy (cmdlinepchar, trim (frmpathselect.edtdir.text)+'' /mdac_typ.exe /q '');
fillchar (startupinfo, sizeof (startupinfo),#0);
startupinfo와 함께
시작하다
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 단계 : 프로그램 그룹 생성
변하기 쉬운:
var
smacro : 문자열;
szmacro : char의 배열 [0..254];
sgroupdesc, sgroupname : 문자열;
Sprogdesc : 문자열;
Sprogicon : 문자열;
// 메인 프로그램 그룹을 만듭니다
// 대화 채널을 엽니 다
ddeclientconv1.openLink라면
시작하다
// 그룹을 만듭니다
sgroupdesc : = ''Ningbo University 코스웨어 관리 시스템 '';
sgroupName : = ''Ningbo University 코스웨어 관리 시스템 v1.0 '';
// 매크로를 만듭니다
smacro : = ''[creategroup ( ''+sgroupdesc+'', ''+sgroupname+'') '';
strpcopy (szmacro, smacro);
ddeclientconv1.executemacro (szmacro, false);
// 아이콘 이미지를 만듭니다
sprogicon : = trim (frmpathselect.edtdir.text)+''/tnbdemo.exe '';;
Sprogdesc : = ''Ningbo University 코스웨어 관리 시스템 '';
smacro : = ''[additem ( ''+sprogicon+'', ''+sprogdesc+'') '';
strpcopy (szmacro, smacro);
ddeclientconv1.executemacro (szmacro, false);
ddeclientconv1.closelink;
끝;
8 단계 : 데스크탑 바로 가기를 만듭니다
// shlobj, comobj, activex를 사용합니다.
var
tmpobject : iunknown;
TMPSLINK : ISHELLLINK;
tmppfile : ipersistfile;
PIDL : PITEMIDLIST;
startupdirectory : char의 배열 [0..max_path];
startUpFilename : 문자열;
LinkFilename : wideString;
C1 : thandle;
시작하다
startupfilename : = '' ''tnbdemo.exe '' '';
tmpobject : = createcomobject (clsid_shelllink);
tmpslink : = iShellLink로 tmpobject;
tmppfile : = ipersistfile로서 tmpobject;
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);
끝;
9 단계 : 기계를 다시 시작하십시오
시작하다
exitwindowsex (2,0);
끝;
위는 프로그램의 주요 성명서로, 내 개발 시스템에서 끊어졌으며 일부 Win API 호출을 사용했습니다. 설치 프로세스 중에는 설치 프로그램이 정제되고 스타일이 매우 특별 할 수 있습니다.