본문 바로가기
Delphi, RadStudio

[개발/delphi] 자기 자신을 지우는 프로그램 만들기(delphi)

by SB리치퍼슨 2011. 12. 12.
[개발/delphi] 자기 자신을 지우는 프로그램 만들기(delphi)


from. 나이렉스 홈페이지 팁란( http://www.nilex.net/ ) 
안치봉( ahn@nilex.co.kr ) 
자기 자신을 지우는 프로그램은 대부분 인스톨에 관계된것 중에서 Uninstall 프로그램 
에 적용이 됩니다. 아래는 그 소스입니다. 간단히 설명을 드리자면 원래 실행중인 프 
로그램을 당장(?) 삭제하는것은 힘듭니다. 그래서 아래꽁수는 시스템에서 지원해주는 
기능을 사용합니다. 자세한건 소스를 직접 분석해 보시기 바랍니다 - 백문이 불여 일 
행! 

... 
... 

procedure TForm1.RemoveFile(FileName: String); 
var 
ShortDest: array[0..400] of Char; 
WINInit: TINIFile; 
begin 
case GetWindowsVerType of 
wvWin95: begin 
WINInit := TINIFile.Create('WININIT.INI'); 
try 
GetShortPathName(PChar(FileName),ShortDest,SizeOf(ShortDest)); 
WINInit.WriteString('Rename','nul',StrPas(ShortDest)); 
finally 
WINInit.Free; 
end; 
end; 
else 
MoveFileEx(PChar(FileName),Nil,MOVEFILE_REPLACE_EXISTING or MOVEFILE_DELAY_U 
NTIL_REBOOT); 
end; 
end; 

function TForm1.GetWindowsVerType: TWindowsVerType; 
var 
OSVersionInfo: TOSVersionInfo; 
Version: String; 
begin 
Result := wvUnidentified; 
OSVersionInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo); 
if not GetVersionEx(OSVersionInfo) then 
raise Exception.Create('Could not get information about the current version 
of Windows'); 
Version := IntToStr(OSVersionInfo.dwMajorVersion)+'.'+IntToStr(OSVersionInfo.d 
wMinorVersion); 
case OSVersionInfo.dwPlatformId of 
VER_PLATFORM_WIN32s: Result := wv31Win32; 
VER_PLATFORM_WIN32_WINDOWS: Result := wvWin95; 
VER_PLATFORM_WIN32_NT: begin 
if Pos('3.5',Version) > 0 then 
Result := wvWinNT351 
else 
Result := wvWinNT; 
end; 
else 
Result := wvUnidentified; 
end; 
end; 
반응형

댓글