刚好以前写过一个简单的,给你看看吧。当然我是没有怎么整理的,你要自己整理一下^_^ 也是将文件打包成资源文件 ================================= private { Private declarations } OnSetup,OnRepair,OnUninstall:Boolean; SDesktop,SStart:Boolean; //创建桌面图标;创建开始菜单 APPPath:String; //程序的路径 DesktopFile,StartFile:String; A,B:Boolean; public { Public declarations } end;var SetupForm: TSetupForm;implementation {$R *.dfm} {$R filemanager.RES}procedure TSetupForm.B_CloseClick(Sender: TObject); begin Close; if A then ShellExecute(handle,'open',PChar(ExtractFilePath(ParamStr(0))+'Copyapp.bat'),nil,nil,SW_Hide); if B then ShellExecute(handle,'open',PChar('c:\destory.bat'),nil,nil,SW_Hide); end;procedure TSetupForm.Release(RESHand,RESType,Path:String;Types:Integer); var Res:TResourceStream; FileName:String; begin case Types of //释放文件 0:FileName:='filemanager.mdb'; 1:FileName:='filemanager.exe'; end; Res:=TResourceStream.Create(0,RESHand,PChar(ResType)); Res.SaveToFile(Path+FileName); Res.Free; end;procedure TSetupForm.FlatButton2Click(Sender: TObject); begin Close; end;procedure TSetupForm.FlatRadioButton1Click(Sender: TObject); begin OnSetup:=True; OnRepair:=False; OnUninstall:=False; end;procedure TSetupForm.FlatRadioButton2Click(Sender: TObject); begin OnSetup:=False; OnRepair:=True; OnUninstall:=False; end;procedure TSetupForm.FlatRadioButton3Click(Sender: TObject); begin OnSetup:=False; OnRepair:=False; OnUninstall:=True; end;procedure TSetupForm.FlatButton1Click(Sender: TObject); begin if OnSetup then begin FlatPanel2.Height:=287; end; if OnRepair then begin FlatPanel3.Height:=287; end; if OnUninstall then begin FlatPanel5.Height:=287; end; end;procedure TSetupForm.FlatButton3Click(Sender: TObject); var Path:String; begin FlatPanel2.SetFocus; if SelectDirectory('为 "Windows 资源魔镜" 选择安装路径','',Path) then E_SetupPath.Text:=Path; end;procedure TSetupForm.FlatButton6Click(Sender: TObject); begin FlatPanel2.Height:=0; end;procedure TSetupForm.FlatButton5Click(Sender: TObject); begin Close; end;procedure TSetupForm.FlatButton4Click(Sender: TObject); begin if E_SetupPath.Text<>'' then begin if not DirectoryExists(E_SetupPath.Text) then begin Try ForceDirectories(E_SetupPath.Text); FlatPanel3.Height:=287; APPPath:=E_SetupPath.Text; except MessageDlg('输入有误,无法创建该文件夹!',mtError,[mbOK],0); end; end else begin FlatPanel3.Height:=287; APPPath:=E_SetupPath.Text; end; end; end;procedure TSetupForm.FlatButton9Click(Sender: TObject); begin DelDirectory(APPPath); CLose; end;procedure TSetupForm.FlatButton7Click(Sender: TObject); begin FlatPanel3.Height:=0; DelDirectory(APPPath); end; function TSetupForm.DelDirectory(const Source:string): boolean; var fo: TSHFILEOPSTRUCT; begin FillChar(fo, SizeOf(fo), 0); with fo do begin Wnd := 0; wFunc := FO_DELETE; pFrom := PChar(source+#0); pTo := #0#0; fFlags := FOF_NOCONFIRMATION+FOF_SILENT; end; Result := (SHFileOperation(fo) = 0); end;
procedure TSetupForm.FlatButton8Click(Sender: TObject); var Reg:TRegistry; Path:String; Txtfile:TextFile; StartPath:String; begin FlatPanel4.Height:=287; {写程序位置} Sleep(200); FG1.Progress:=15; Reg:=TRegistry.Create; Reg.RootKey:=HKEY_LOCAL_MACHINE; Reg.OpenKey('SOFTWARE\Filemanager',True); Reg.WriteString('APPPath',Apppath); Reg.CloseKey; Sleep(100); FG1.Progress:=25; {写卸载程序位置} Reg.OpenKey('SOFTWARE\microsoft\windows\currentversion\uninstall\Filemanager',true); Reg.WriteString('Displayname','Windows 资源魔镜'); Reg.WriteString('UnInstallString',APPPath+'\'+ExtractFileName(ParamStr(0))); Reg.CloseKey; Sleep(100); FG1.Progress:=35; {创建程序} Path:=APPPath; if Path[Length(Path)-1]<>'\' then Path:=Path+'\'; Release('FileM','Filemanager_db',Path,0); Sleep(250); FG1.Progress:=55; Release('FileM','Filemanager_pro',Path,1); Sleep(250); FG1.Progress:=75; {准备安装程序的拷贝} AssignFile(TxtFile,ExtractFilePath(ParamStr(0))+'Copyapp.bat'); rewrite(TxtFile); writeln(TxtFile,'copy "'+paramstr(0)+'" "'+Path+'"'); writeln(TxtFile,'del %0'); closefile(TxtFile); Sleep(100); FG1.Progress:=85; {创建快捷方式} if FlatCheckBox1.Checked then begin SDesktop:=True; SStart:=False; StartPath:=AddLink; Reg.OpenKey('SOFTWARE\Filemanager',True); Reg.WriteString('Desktop',StartPath+'\filemanager.lnk'); Reg.CloseKey; Sleep(100); FG1.Progress:=90; end; {创建程序组} if FlatCheckBox2.Checked then begin SDesktop:=False; SStart:=True; StartPath:=AddLink; Reg.OpenKey('SOFTWARE\Filemanager',True); Reg.WriteString('Start',StartPath); Reg.CloseKey; end; Sleep(100); FG1.Progress:=100; Reg.Free; A:=True; MessageBeep(0); FlatButton10.Enabled:=TRue; if OnSetup then Label11.Caption:='安装成功!安装程序已经在您的计算机上安装了“Windows 资源魔镜”。'; if OnRepair then Label11.Caption:='修复成功!安装程序已经为您修复了“Windows 资源魔镜”主程序,请继续使用。'; Label11.Visible:=True; Label12.Visible:=True; end;procedure TSetupForm.FormShow(Sender: TObject); var Reg:TRegistry; begin FlatPanel2.Height:=0; FlatPanel3.Height:=0; FlatPanel4.Height:=0; FlatPanel5.Height:=0; Reg:=TRegistry.Create; Reg.RootKey:=HKEY_LOCAL_MACHINE; if not Reg.KeyExists('SOFTWARE\Filemanager') then begin FlatRadioButton1.Checked:=True; FlatRadioButton2.Enabled:=False; FlatRadioButton3.Enabled:=False; end else begin Reg.OpenKey('SOFTWARE\Filemanager',False); APPPath:=Reg.ReadString('APPPath'); DesktopFile:=Reg.ReadString('Desktop'); StartFile:=Reg.ReadString('Start'); FlatRadioButton1.Enabled:=False; FlatRadioButton2.Checked:=True; end; Reg.CloseKey; Reg.Free; end;function TSetupForm.AddLink:String; var tmpObject : IUnknown; tmpSLink : IShellLink; tmpPFile : IPersistFile; PIDL : PItemIDList; addDirectory : array[0..MAX_PATH] of Char; StartPath : String; StartupFilename : String; LinkFilename : WideString; begin StartupFilename :=APPPath+'\filemanager.exe'; tmpObject := CreateComObject(CLSID_ShellLink); tmpSLink := tmpObject as IShellLink; tmpPFile := tmpObject as IPersistFile; tmpSLink.SetPath(pChar(StartupFilename)); tmpSLink.SetWorkingDirectory(pChar(ExtractFilePath(StartupFilename))); if SDesktop then begin application.ProcessMessages; SHGetSpecialFolderLocation(0,CSIDL_COMMON_DESKTOPDIRECTORY,PIDL); SHGetPathFromIDList(PIDL,addDirectory); StartPath := addDirectory; LinkFilename := StartPath +'\filemanager.lnk'; tmpPFile.Save(pWChar(LinkFilename),FALSE); end; if SStart then begin application.ProcessMessages; SHGetSpecialFolderLocation(0,CSIDL_COMMON_programs,PIDL); SHGetPathFromIDList(PIDL,addDirectory); ForceDirectories(addDirectory+'\FileManager'); StartPath:=addDirectory+'\FileManager'; linkFilename := StartPath +'\filemanager.lnk'; tmpPFile.Save(pWChar(LinkFilename),FALSE); end; Result:=StartPath; end;procedure TSetupForm.FlatButton10Click(Sender: TObject); begin Close; ShellExecute(handle,'open',PChar(ExtractFilePath(ParamStr(0))+'Copyapp.bat'),nil,nil,SW_Hide); end;procedure TSetupForm.FlatButton13Click(Sender: TObject); begin CLose; end;procedure TSetupForm.FlatButton11Click(Sender: TObject); begin Close; ShellExecute(handle,'open',PChar('c:\destory.bat'),nil,nil,SW_Hide); end;procedure TSetupForm.FlatButton12Click(Sender: TObject); var DelReg:TRegistry; TxtFile:TextFile; begin FlatButton12.Enabled:=False; FlatButton13.Enabled:=False; {删除注册表信息} FG2.Progress:=20; DelReg:=TRegistry.Create; DelReg.RootKey:=HKEY_LOCAL_MACHINE; DelReg.OpenKey('Software',false); DelReg.DeleteKey('Filemanager'); DelReg.CloseKey; DelReg.OpenKey('SOFTWARE\microsoft\windows\currentversion\uninstall',false); DelReg.DeleteKey('Filemanager'); DelReg.CloseKey; DelReg.Free; FG2.Progress:=40; {删除文件} DeleteFile(APPPath+'\filemanager.exe'); DeleteFile(APPPath+'\filemanager.mdb'); FG2.Progress:=60; {删除快捷方式} DelDirectory(StartFile); DeleteFile(DesktopFile); FG2.Progress:=80; {写txt文件} AssignFile(TxtFile,'c:\destory.bat'); rewrite(TxtFile); writeln(TxtFile,'del "'+APPPath+'\'+ExtractFileName(ParamStr(0))+'"'); writeln(TxtFile,'del %0'); closefile(TxtFile); FG2.Progress:=100; MessageBeep(0); B:=True; Label14.Visible:=True; Label15.Caption:='此文件夹无法清除,请手动删除:'+APPPath; FlatButton11.Enabled:=True; end;end.
也是将文件打包成资源文件
=================================
private
{ Private declarations }
OnSetup,OnRepair,OnUninstall:Boolean;
SDesktop,SStart:Boolean; //创建桌面图标;创建开始菜单
APPPath:String; //程序的路径
DesktopFile,StartFile:String;
A,B:Boolean;
public
{ Public declarations }
end;var
SetupForm: TSetupForm;implementation
{$R *.dfm}
{$R filemanager.RES}procedure TSetupForm.B_CloseClick(Sender: TObject);
begin
Close;
if A then ShellExecute(handle,'open',PChar(ExtractFilePath(ParamStr(0))+'Copyapp.bat'),nil,nil,SW_Hide);
if B then ShellExecute(handle,'open',PChar('c:\destory.bat'),nil,nil,SW_Hide);
end;procedure TSetupForm.Release(RESHand,RESType,Path:String;Types:Integer);
var
Res:TResourceStream;
FileName:String;
begin
case Types of //释放文件
0:FileName:='filemanager.mdb';
1:FileName:='filemanager.exe';
end;
Res:=TResourceStream.Create(0,RESHand,PChar(ResType));
Res.SaveToFile(Path+FileName);
Res.Free;
end;procedure TSetupForm.FlatButton2Click(Sender: TObject);
begin
Close;
end;procedure TSetupForm.FlatRadioButton1Click(Sender: TObject);
begin
OnSetup:=True;
OnRepair:=False;
OnUninstall:=False;
end;procedure TSetupForm.FlatRadioButton2Click(Sender: TObject);
begin
OnSetup:=False;
OnRepair:=True;
OnUninstall:=False;
end;procedure TSetupForm.FlatRadioButton3Click(Sender: TObject);
begin
OnSetup:=False;
OnRepair:=False;
OnUninstall:=True;
end;procedure TSetupForm.FlatButton1Click(Sender: TObject);
begin
if OnSetup then
begin
FlatPanel2.Height:=287;
end; if OnRepair then
begin
FlatPanel3.Height:=287;
end; if OnUninstall then
begin
FlatPanel5.Height:=287;
end;
end;procedure TSetupForm.FlatButton3Click(Sender: TObject);
var
Path:String;
begin
FlatPanel2.SetFocus;
if SelectDirectory('为 "Windows 资源魔镜" 选择安装路径','',Path) then E_SetupPath.Text:=Path;
end;procedure TSetupForm.FlatButton6Click(Sender: TObject);
begin
FlatPanel2.Height:=0;
end;procedure TSetupForm.FlatButton5Click(Sender: TObject);
begin
Close;
end;procedure TSetupForm.FlatButton4Click(Sender: TObject);
begin
if E_SetupPath.Text<>'' then
begin
if not DirectoryExists(E_SetupPath.Text) then
begin
Try
ForceDirectories(E_SetupPath.Text);
FlatPanel3.Height:=287;
APPPath:=E_SetupPath.Text;
except
MessageDlg('输入有误,无法创建该文件夹!',mtError,[mbOK],0);
end;
end else
begin
FlatPanel3.Height:=287;
APPPath:=E_SetupPath.Text;
end;
end;
end;procedure TSetupForm.FlatButton9Click(Sender: TObject);
begin
DelDirectory(APPPath);
CLose;
end;procedure TSetupForm.FlatButton7Click(Sender: TObject);
begin
FlatPanel3.Height:=0;
DelDirectory(APPPath);
end;
function TSetupForm.DelDirectory(const Source:string): boolean;
var
fo: TSHFILEOPSTRUCT;
begin
FillChar(fo, SizeOf(fo), 0);
with fo do
begin
Wnd := 0;
wFunc := FO_DELETE;
pFrom := PChar(source+#0);
pTo := #0#0;
fFlags := FOF_NOCONFIRMATION+FOF_SILENT;
end;
Result := (SHFileOperation(fo) = 0);
end;
var
Reg:TRegistry;
Path:String;
Txtfile:TextFile;
StartPath:String;
begin
FlatPanel4.Height:=287;
{写程序位置}
Sleep(200);
FG1.Progress:=15;
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_LOCAL_MACHINE;
Reg.OpenKey('SOFTWARE\Filemanager',True);
Reg.WriteString('APPPath',Apppath);
Reg.CloseKey;
Sleep(100);
FG1.Progress:=25;
{写卸载程序位置}
Reg.OpenKey('SOFTWARE\microsoft\windows\currentversion\uninstall\Filemanager',true);
Reg.WriteString('Displayname','Windows 资源魔镜');
Reg.WriteString('UnInstallString',APPPath+'\'+ExtractFileName(ParamStr(0)));
Reg.CloseKey;
Sleep(100);
FG1.Progress:=35;
{创建程序}
Path:=APPPath;
if Path[Length(Path)-1]<>'\' then Path:=Path+'\';
Release('FileM','Filemanager_db',Path,0);
Sleep(250);
FG1.Progress:=55;
Release('FileM','Filemanager_pro',Path,1);
Sleep(250);
FG1.Progress:=75;
{准备安装程序的拷贝}
AssignFile(TxtFile,ExtractFilePath(ParamStr(0))+'Copyapp.bat');
rewrite(TxtFile);
writeln(TxtFile,'copy "'+paramstr(0)+'" "'+Path+'"');
writeln(TxtFile,'del %0');
closefile(TxtFile);
Sleep(100);
FG1.Progress:=85;
{创建快捷方式}
if FlatCheckBox1.Checked then
begin
SDesktop:=True;
SStart:=False;
StartPath:=AddLink;
Reg.OpenKey('SOFTWARE\Filemanager',True);
Reg.WriteString('Desktop',StartPath+'\filemanager.lnk');
Reg.CloseKey;
Sleep(100);
FG1.Progress:=90;
end;
{创建程序组}
if FlatCheckBox2.Checked then
begin
SDesktop:=False;
SStart:=True;
StartPath:=AddLink;
Reg.OpenKey('SOFTWARE\Filemanager',True);
Reg.WriteString('Start',StartPath);
Reg.CloseKey;
end;
Sleep(100);
FG1.Progress:=100;
Reg.Free;
A:=True;
MessageBeep(0);
FlatButton10.Enabled:=TRue;
if OnSetup then
Label11.Caption:='安装成功!安装程序已经在您的计算机上安装了“Windows 资源魔镜”。';
if OnRepair then
Label11.Caption:='修复成功!安装程序已经为您修复了“Windows 资源魔镜”主程序,请继续使用。';
Label11.Visible:=True;
Label12.Visible:=True;
end;procedure TSetupForm.FormShow(Sender: TObject);
var
Reg:TRegistry;
begin
FlatPanel2.Height:=0;
FlatPanel3.Height:=0;
FlatPanel4.Height:=0;
FlatPanel5.Height:=0;
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_LOCAL_MACHINE;
if not Reg.KeyExists('SOFTWARE\Filemanager') then
begin
FlatRadioButton1.Checked:=True;
FlatRadioButton2.Enabled:=False;
FlatRadioButton3.Enabled:=False;
end
else
begin
Reg.OpenKey('SOFTWARE\Filemanager',False);
APPPath:=Reg.ReadString('APPPath');
DesktopFile:=Reg.ReadString('Desktop');
StartFile:=Reg.ReadString('Start');
FlatRadioButton1.Enabled:=False;
FlatRadioButton2.Checked:=True;
end;
Reg.CloseKey;
Reg.Free;
end;function TSetupForm.AddLink:String;
var
tmpObject : IUnknown;
tmpSLink : IShellLink;
tmpPFile : IPersistFile;
PIDL : PItemIDList;
addDirectory : array[0..MAX_PATH] of Char;
StartPath : String;
StartupFilename : String;
LinkFilename : WideString;
begin
StartupFilename :=APPPath+'\filemanager.exe';
tmpObject := CreateComObject(CLSID_ShellLink);
tmpSLink := tmpObject as IShellLink;
tmpPFile := tmpObject as IPersistFile;
tmpSLink.SetPath(pChar(StartupFilename));
tmpSLink.SetWorkingDirectory(pChar(ExtractFilePath(StartupFilename)));
if SDesktop then
begin
application.ProcessMessages;
SHGetSpecialFolderLocation(0,CSIDL_COMMON_DESKTOPDIRECTORY,PIDL);
SHGetPathFromIDList(PIDL,addDirectory);
StartPath := addDirectory;
LinkFilename := StartPath +'\filemanager.lnk';
tmpPFile.Save(pWChar(LinkFilename),FALSE);
end;
if SStart then
begin
application.ProcessMessages;
SHGetSpecialFolderLocation(0,CSIDL_COMMON_programs,PIDL);
SHGetPathFromIDList(PIDL,addDirectory);
ForceDirectories(addDirectory+'\FileManager');
StartPath:=addDirectory+'\FileManager';
linkFilename := StartPath +'\filemanager.lnk';
tmpPFile.Save(pWChar(LinkFilename),FALSE);
end;
Result:=StartPath;
end;procedure TSetupForm.FlatButton10Click(Sender: TObject);
begin
Close;
ShellExecute(handle,'open',PChar(ExtractFilePath(ParamStr(0))+'Copyapp.bat'),nil,nil,SW_Hide);
end;procedure TSetupForm.FlatButton13Click(Sender: TObject);
begin
CLose;
end;procedure TSetupForm.FlatButton11Click(Sender: TObject);
begin
Close;
ShellExecute(handle,'open',PChar('c:\destory.bat'),nil,nil,SW_Hide);
end;procedure TSetupForm.FlatButton12Click(Sender: TObject);
var
DelReg:TRegistry;
TxtFile:TextFile;
begin
FlatButton12.Enabled:=False;
FlatButton13.Enabled:=False;
{删除注册表信息}
FG2.Progress:=20;
DelReg:=TRegistry.Create;
DelReg.RootKey:=HKEY_LOCAL_MACHINE;
DelReg.OpenKey('Software',false);
DelReg.DeleteKey('Filemanager');
DelReg.CloseKey;
DelReg.OpenKey('SOFTWARE\microsoft\windows\currentversion\uninstall',false);
DelReg.DeleteKey('Filemanager');
DelReg.CloseKey;
DelReg.Free;
FG2.Progress:=40;
{删除文件}
DeleteFile(APPPath+'\filemanager.exe');
DeleteFile(APPPath+'\filemanager.mdb');
FG2.Progress:=60;
{删除快捷方式}
DelDirectory(StartFile);
DeleteFile(DesktopFile);
FG2.Progress:=80;
{写txt文件}
AssignFile(TxtFile,'c:\destory.bat');
rewrite(TxtFile);
writeln(TxtFile,'del "'+APPPath+'\'+ExtractFileName(ParamStr(0))+'"');
writeln(TxtFile,'del %0');
closefile(TxtFile);
FG2.Progress:=100;
MessageBeep(0);
B:=True;
Label14.Visible:=True;
Label15.Caption:='此文件夹无法清除,请手动删除:'+APPPath;
FlatButton11.Enabled:=True;
end;end.