一个相对完整的inno setup
Posted 卑微的小李
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个相对完整的inno setup相关的知识,希望对你有一定的参考价值。
代码:
;#define MyAppId "{{01DDF602-7CF8-40C9-816F-AD165F37F5E0}" #define MyAppName "ABCD" #define MyAppVersion "1.0.1.2" #define MyAppPublisher "AAA股份有限公司" #define MyAppURL "http://www.AAAA.com.cn/" #define MyAppExeName "AAAA.exe" #include "trayiconctrl.iss" [Setup] AppId={{01DDF602-7CF8-40C9-816F-AD165F37F5E0} AppName={#MyAppName} AppVersion={#MyAppVersion} AppVerName={#MyAppName} AppPublisher={#MyAppPublisher} AppPublisherURL={#MyAppURL} DefaultDirName={pf}\Julong Educational\SCEngine DefaultGroupName={#MyAppName} AllowNoIcons=yes OutputDir=D:OutputBaseFilename=SCEngine setup SetupIconFile=installer.ico Compression=lzma/ultra64 SolidCompression=yes VersionInfoVersion={#MyAppVersion} VersionInfoTextVersion={#MyAppVersion} VersionInfoDescription=SCEngine setup DisableReadyPage=yes DisableProgramGroupPage=yes InternalCompressLevel=ultra64 DirExistsWarning=no UninstallIconFile=Uninstall.ico [Messages] BeveledLabel= [CustomMessages] FinishedHeadingLabel=恭喜你,{#MyAppName}安装成功! FinishedLabel=安装程序已在您的电脑中安装了“{#MyAppName}”。此应用程序可以通过选择安装的快捷方式运行。%n%n单击 [完成(F)] 关闭安装程序。 Tooltip={#MyAppName} Ver 1.0 TooltipText={#MyAppName}安装正在开始... MenuStrs=显示/隐藏 {#MyAppName} 安装程序;-;关于 {#MyAppName} ;-;退出 {#MyAppName} 安装 [Icons] Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" ; WorkingDir: {app};Check: groupicon Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"; WorkingDir: {app}; Check: groupicon Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; WorkingDir: {app};Check: desktopicon ;Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}; Filename: {app}\julongEngine.exe; Check: quicklaunchicon; WorkingDir: {app} [Files] Source: window.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak Source: window2.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak Source: Close1.bmp; Flags: dontcopy solidbreak Source: Close2.bmp; Flags: dontcopy solidbreak Source: Close3.bmp; Flags: dontcopy solidbreak Source: btnIn1.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak Source: btnIn2.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak Source: btnIn3.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak Source: "D:\SCEngine Software V1.0 Packet Ver1.0.1.2\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: AddToDetaList; AfterInstall: Progress(); Source: "installer.ico"; Flags: dontcopy //新增按键 Source: DirImg.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak Source: btn_by1.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak Source: btn_by2.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak Source: btn_by3.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak Source: btn_n1.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak Source: btn_n2.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak Source: btn_n3.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak Source: btn_ss1.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak Source: btn_ss2.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak Source: btn_ss3.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak Source: backBtn1.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak Source: backBtn2.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak Source: backBtn3.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak [Registry] Root: HKCU; Subkey: "Software\Microsoft\SCEngine"; valueType: string; valueName: "path" ; valueData: """{app}\{#MyAppExeName}""";Flags: uninsdeletevalue; [Code] Const WM_SYSCOMMAND = $0112; WM_USER = $400; WM_ICON_NOTIFY = WM_USER + 22; // 自己定义一个 TrayIcon 的消息标志以和其他的消息区分 MF_BYPOSITION = $400; MF_ENABLED = 0; MF_GRAYED = 1; IMAGE_ICON = 1; LR_LOADFROMFILE = $10; function ReleaseCapture(): Longint; external '[email protected] stdcall'; function EnableMenuItem(hMenu: UINT; uIDEnableItem, uEnable: UINT): BOOL; external '[email protected] stdcall'; function IsWindowEnabled(hWnd: HWND): BOOL; external '[email protected] stdcall'; function LoadImage(hInst: UINT; ImageName: String; ImageType: UINT; X, Y: Integer; Flags: UINT): THandle; external '[email protected] stdcall'; var Ico: UINT; MySetupForm: TSetupForm; TaskBox1,TaskBox2,TaskBox3,RunBox1,RunBox2,RunBox3,RunBox4: TCheckBox; //创建目录页面选框和新页面复选框 TaskBox1Label,TaskBox2Label,TaskBox3Label,TaskBox4Label,TaskBox5Label,TaskBox6Label,NewLabel,NewStatusLabel,FinishedLabel3,FinishedLabel4,RunBox1Label,RunBox2Label,RunBox3Label,RunBox4Label: TLabel; //请选择安装目录 sversion,bigLabel:Tlabel; //关闭按钮 CloseBtn: TBitmapImage; //安装百分比 ProgressLabel: TLabel; //安装细节 DetaList: TNewListBox; ShowDetaBtn: TNewButton; //按钮 NewDirEdit,setbtn,setbcbtn:Tlabel; NextButton: TBitmapImage; F: String; WizardFormImage: TBitmapImage; //目录浏览框 dirviewImage: TBitmapImage; //选择目录 dirCooseImage: TBitmapImage; //自定义安装 zdyianZhuangImage: TBitmapImage; //快速安装 ksuanZhuangImage: TBitmapImage; //返回 backBtn: TBitmapImage; procedure BitmapImage1MouseLeave(Sender: TObject); forward; procedure en(Sender: TObject); forward; //安装细节 procedure ShowDetaBtnOnClick(Sender: TObject); begin ShowDetaBtn.Visible := False; DetaList.Visible := True; end; //单击“取消”直接退出 procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean); begin Confirm := False; end; //关闭按钮 procedure CloseBtnOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer); begin CloseBtn.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Close3.bmp')); end; procedure CloseBtnOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer); begin CloseBtn.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Close2.bmp')); end; procedure CloseBtnOnMouseEnter(Sender: TObject); begin CloseBtn.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Close2.bmp')) end; procedure CloseBtnOnMouseLeave(Sender: TObject); begin CloseBtn.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Close1.bmp')); end; procedure CloseBtnOnClick(Sender: TObject); begin WizardForm.Close; end; //打开网站 //procedure baiduclick(Sender: TObject); //begin //ShellExec('open', 'http://www.baidu.com/', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode); //end; //procedure tbclick(Sender: TObject); //begin //ShellExec('open', 'http://www.taobao.com/', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode); //end; procedure setting(Sender: TObject); begin NextButton.Parent := WizardForm; //setbcbtn.show //setbtn.hide NewLabel.hide bigLabel.show sversion.show TaskBox1.show //TaskBox2.show TaskBox3.show NewDirEdit.hide TaskBox1Label.show backBtn.Parent := WizardForm; NewLabel.Caption := ExpandConstant('安装目录:'); //控件文字 '#13' NewDirEdit.Caption:=WizardForm.DirEdit.Text; if (Length(WizardForm.DirEdit.Text)>48) then begin NewDirEdit.Caption:= Copy(WizardForm.DirEdit.Text,0,23) + '...' + Copy(WizardForm.DirEdit.Text,Length(WizardForm.DirEdit.Text)-20,20); end; TaskBox3Label.show NewDirEdit.show dirviewImage.show NewLabel.show NextButton.show dirCooseImage.show NewLabel.show NewDirEdit.Show; zdyianZhuangImage.Hide; ksuanZhuangImage.Hide; backBtn.Show; WizardFormImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\window2.bmp')); end; //返回 procedure settingbcbtn(Sender: TObject); begin NextButton.show //setbcbtn.hide //setbtn.show sversion.show TaskBox1.hide //TaskBox2.hide TaskBox3.hide TaskBox1Label.hide //TaskBox2Label.hide TaskBox3Label.hide NextButton.hide; dirviewImage.Hide; NewLabel.hide; NextButton.Hide; dirCooseImage.Hide; NewLabel.Hide; NewDirEdit.hide; zdyianZhuangImage.Show; ksuanZhuangImage.Show; backBtn.Hide; WizardFormImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\window.bmp')); end; //浏览 procedure NewDirBrowseButtonClick(Sender: TObject); begin WizardForm.DirBrowseButton.Click; NewDirEdit.Caption:=WizardForm.DirEdit.Text; if (Length(WizardForm.DirEdit.Text)>48) then begin NewDirEdit.Caption:= Copy(WizardForm.DirEdit.Text,0,23) + '...' + Copy(WizardForm.DirEdit.Text,Length(WizardForm.DirEdit.Text)-20,20); end; end; procedure TaskBox1LabelOnClick(Sender: TObject); begin if TaskBox1.Checked = False then TaskBox1.Checked := True else TaskBox1.Checked := False; end; procedure TaskBox2LabelOnClick(Sender: TObject); begin if TaskBox2.Checked = False then TaskBox2.Checked := True else TaskBox2.Checked := False; end; procedure TaskBox3LabelOnClick(Sender: TObject); begin if TaskBox3.Checked = False then TaskBox3.Checked := True else TaskBox3.Checked := False; end; procedure RunBox1LabelOnClick(Sender: TObject); begin if RunBox1.Checked = False then RunBox1.Checked := True else RunBox1.Checked := False; end; procedure RunBox2LabelOnClick(Sender: TObject); begin if RunBox2.Checked = False then RunBox2.Checked := True else RunBox2.Checked := False; end; procedure WizardFormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ReleaseCapture SendMessage(WizardForm.Handle, WM_SYSCOMMAND, $F012, 0) end; //系统托盘 procedure TrayMenuItemOnClick(MenuItemIndex: Integer); begin // 下面 这句代码表示 WizardForm 有弹出对话框时禁止菜单点击事件 if not IsWindowEnabled(WizardForm.Handle) then exit; Case MenuItemIndex of 0: ToggleWizardVisible; // 因为 0 项菜单为默认菜单, 所以这里的事件除了菜单点击外, 双击图标也能触发. 2: MainForm.ShowAboutBox; 4: WizardForm.Close; end; end; procedure TrayMenuOnPopup(PopMenu: LongWord; var bShow: Boolean); begin // 下面这一句的效果是如果 WizardForm 显示了对话框后,为了防止多重显示对话框,所以禁止了右键菜单 bShow := IsWindowEnabled(WizardForm.Handle); // 这里是菜单弹出前的处理回调函数, 以下的作用是当 WziardForm 缩到托盘区的时候, 禁用 "About" 和 "Exit" 的菜单 if WizardFormInTray() then begin EnableMenuItem(PopMenu, 2, MF_BYPOSITION or MF_GRAYED); EnableMenuItem(PopMenu, 4, MF_BYPOSITION or MF_GRAYED); end else begin EnableMenuItem(PopMenu, 2, MF_BYPOSITION or MF_GRAYED); EnableMenuItem(PopMenu, 4, MF_BYPOSITION or MF_ENABLED); end; end; //安装按键 procedure en(Sender: TObject); begin WizardForm.NextButton.Click; end; procedure fdown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer); begin F:= ExpandConstant('{tmp}\btnIn3.bmp'); NextButton.Bitmap.LoadFromFile(F); end; procedure fup(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer); begin F:= ExpandConstant('{tmp}\btnIn2.bmp'); NextButton.Bitmap.LoadFromFile(F); end; procedure fs(Sender: TObject); begin F:= ExpandConstant('{tmp}\btnIn2.bmp'); NextButton.Bitmap.LoadFromFile(F); end; procedure BitmapImage1MouseLeave(Sender: TObject); begin F:= ExpandConstant('{tmp}\btnIn1.bmp'); NextButton.Bitmap.LoadFromFile(F); end; //浏览按键 btn_by2 procedure btn_bydown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer); begin F:= ExpandConstant('{tmp}\btn_by3.bmp'); dirCooseImage.Bitmap.LoadFromFile(F); end; procedure btn_byup(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer); begin F:= ExpandConstant('{tmp}\btn_by2.bmp'); dirCooseImage.Bitmap.LoadFromFile(F); end; procedure btn_bys(Sender: TObject); begin F:= ExpandConstant('{tmp}\btn_by2.bmp'); dirCooseImage.Bitmap.LoadFromFile(F); end; procedure btn_byMouseLeave(Sender: TObject); begin F:= ExpandConstant('{tmp}\btn_by1.bmp'); dirCooseImage.Bitmap.LoadFromFile(F); end; //自定义安装按钮 zdyianZhuangImage procedure btn_ndown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer); begin F:= ExpandConstant('{tmp}\btn_n3.bmp'); zdyianZhuangImage.Bitmap.LoadFromFile(F); end; procedure btn_nup(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer); begin F:= ExpandConstant('{tmp}\btn_n2.bmp'); zdyianZhuangImage.Bitmap.LoadFromFile(F); end; procedure btn_nys(Sender: TObject); begin F:= ExpandConstant('{tmp}\btn_n2.bmp'); zdyianZhuangImage.Bitmap.LoadFromFile(F); end; procedure btn_nMouseLeave(Sender: TObject); begin F:= ExpandConstant('{tmp}\btn_n1.bmp'); zdyianZhuangImage.Bitmap.LoadFromFile(F); end; //快速安装 procedure btns_ndown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer); begin F:= ExpandConstant('{tmp}\btn_ss3.bmp'); ksuanZhuangImage.Bitmap.LoadFromFile(F); end; procedure btns_nup(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer); begin F:= ExpandConstant('{tmp}\btn_ss2.bmp'); ksuanZhuangImage.Bitmap.LoadFromFile(F); end; procedure btns_nys(Sender: TObject); begin F:= ExpandConstant('{tmp}\btn_ss2.bmp'); ksuanZhuangImage.Bitmap.LoadFromFile(F); end; procedure btns_nMouseLeave(Sender: TObject); begin F:= ExpandConstant('{tmp}\btn_ss1.bmp'); ksuanZhuangImage.Bitmap.LoadFromFile(F); end; //返回 procedure backBtn_ndown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer); begin F:= ExpandConstant('{tmp}\backBtn3.bmp'); backBtn.Bitmap.LoadFromFile(F); end; procedure backBtn_nup(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer); begin F:= ExpandConstant('{tmp}\backBtn2.bmp'); backBtn.Bitmap.LoadFromFile(F); end; procedure backBtn_nys(Sender: TObject); begin F:= ExpandConstant('{tmp}\backBtn2.bmp'); backBtn.Bitmap.LoadFromFile(F); end; procedure backBtn_nMouseLeave(Sender: TObject); begin F:= ExpandConstant('{tmp}\backBtn1.bmp'); backBtn.Bitmap.LoadFromFile(F); end; function ShouldSkipPage(PageID: Integer): Boolean; begin if PageID=wpWelcome then result := true; if PageID=wpFinished then result := true; end; procedure InitializeWizard(); begin //WizardForm.Width:=482; //WizardForm.Height:=302; WizardForm.Width:=587; WizardForm.Height:=437; WizardForm.BorderStyle:=bsNone; //去边框 ExtractTemporaryFile('window.bmp'); ExtractTemporaryFile('window2.bmp'); ExtractTemporaryFile('Close1.bmp'); ExtractTemporaryFile('Close2.bmp'); ExtractTemporaryFile('Close3.bmp'); ExtractTemporaryFile('btnIn1.bmp'); ExtractTemporaryFile('btnIn2.bmp'); ExtractTemporaryFile('btnIn3.bmp'); ExtractTemporaryFile('installer.ico'); //按键 ExtractTemporaryFile('DirImg.bmp'); ExtractTemporaryFile('btn_by1.bmp'); ExtractTemporaryFile('btn_by2.bmp'); ExtractTemporaryFile('btn_by3.bmp'); ExtractTemporaryFile('btn_n1.bmp'); ExtractTemporaryFile('btn_n2.bmp'); ExtractTemporaryFile('btn_n3.bmp'); ExtractTemporaryFile('btn_ss1.bmp'); ExtractTemporaryFile('btn_ss2.bmp'); ExtractTemporaryFile('btn_ss3.bmp'); ExtractTemporaryFile('backBtn1.bmp'); ExtractTemporaryFile('backBtn2.bmp'); ExtractTemporaryFile('backBtn3.bmp'); WizardFormImage := TBitmapImage.Create(WizardForm); WizardFormImage.Parent := WizardForm; WizardFormImage.Align := alClient; //图片拉伸 //WizardFormImage.SendToBack; //显示底部横线 WizardFormImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\window.bmp')) WizardFormImage.OnMouseDown:[email protected]; //透明 //SetWindowLong(WizardForm.Handle, GWL_EXSTYLE, GetWindowLong(WizardForm.Handle, GWL_EXSTYLE) or WS_EX_LAYERED) //SetLayeredWindowAttributes(WizardForm.Handle, TransparentColor,(255 * TransparentPercent) / 100, LWA_COLORKEY) //系统托盘 Ico := LoadImage(0, ExpandConstant('{tmp}\face.ico'), IMAGE_ICON, 16, 16, LR_LOADFROMFILE); InitTrayIconCtrl(MainForm.Handle, WizardForm.Handle, WM_ICON_NOTIFY, // 自定义自己的消息 ID, 以区分其他消息 CustomMessage('Tooltip'), // Tooltip 鼠标在 TrayIcon 图标上移动的时候显示的提示 Ico, // 这里默认使用安装程序图标 True, // 立即显示, 不用调用 ShowTrayIcon False, // 不显示安装程序的任务栏按钮 CustomMessage('MenuStrs'), // 不建立托盘图标菜单 0, // 没有默认菜单项 @TrayMenuItemOnClick, // 没有菜单点击事件 @TrayMenuOnPopup, // 没有菜单弹出事件 nil // 没有自定义托盘图标事件 ); // 显示漫画型气泡提示 ShowBalloon(CustomMessage('TooltipText'), CustomMessage('Tooltip'), NIIF_INFO, 10, False); //关闭按钮 CloseBtn := TBitmapImage.Create(WizardForm); CloseBtn.ShowHint := True; CloseBtn.Cursor := crHand; CloseBtn.OnMouseDown := @CloseBtnOnMouseDown; CloseBtn.OnMouseUp := @CloseBtnOnMouseUp; CloseBtn.OnMouseEnter := @CloseBtnOnMouseEnter; CloseBtn.OnMouseLeave := @CloseBtnOnMouseLeave; CloseBtn.Parent := WizardForm; CloseBtn.Width := 22 CloseBtn.Height := 22 CloseBtn.Left := 454+108; CloseBtn.Top := 3; CloseBtn.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Close1.bmp')); CloseBtn.OnClick:= @CloseBtnOnClick; //自定义安装按钮 zdyianZhuangImage := TBitmapImage.Create(WizardForm); zdyianZhuangImage.ShowHint := True; zdyianZhuangImage.Cursor := crHand; zdyianZhuangImage.Parent := WizardForm; zdyianZhuangImage.Width := 91; zdyianZhuangImage.Height := 14; zdyianZhuangImage.Left := WizardForm.Width - 91 - 20; zdyianZhuangImage.Top := WizardForm.Height - 30; zdyianZhuangImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\btn_n1.bmp')); zdyianZhuangImage.OnClick:[email protected]; zdyianZhuangImage.OnMouseDown := @btn_ndown; zdyianZhuangImage.OnMouseUp:[email protected]_nup; zdyianZhuangImage.OnMouseEnter := @btn_nys; zdyianZhuangImage.OnMouseLeave := @btn_nMouseLeave; //快速安装ksuanZhuangImage ksuanZhuangImage := TBitmapImage.Create(WizardForm); ksuanZhuangImage.ShowHint := True; ksuanZhuangImage.Cursor := crHand; ksuanZhuangImage.Parent := WizardForm; ksuanZhuangImage.Width := 210; ksuanZhuangImage.Height := 59; ksuanZhuangImage.Left := (WizardForm.Width - 210)/2; ksuanZhuangImage.Top := WizardForm.Height/3*2+20; ksuanZhuangImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\btn_ss1.bmp')); ksuanZhuangImage.OnClick:[email protected]; ksuanZhuangImage.OnMouseDown := @btns_ndown; ksuanZhuangImage.OnMouseUp:[email protected]_nup; ksuanZhuangImage.OnMouseEnter := @btns_nys; ksuanZhuangImage.OnMouseLeave := @btns_nMouseLeave; //安装按钮 NextButton := TBitmapImage.Create(WizardForm); NextButton.ShowHint := True; NextButton.Cursor := crHand; //NextButton.Parent := WizardForm; NextButton.Width := 95; NextButton.Height := 30; NextButton.Left := WizardForm.Width - 91 - 100; NextButton.Top := WizardForm.Height -(16 + 30); NextButton.Bitmap.LoadFromFile(ExpandConstant('{tmp}\btnIn1.bmp')); NextButton.OnClick:= @en; NextButton.OnMouseDown := @fdown; NextButton.OnMouseUp:[email protected]; NextButton.OnMouseEnter := @fs; NextButton.OnMouseLeave := @BitmapImage1MouseLeave; //返回按钮 backBtn := TBitmapImage.Create(WizardForm); backBtn.ShowHint := True; backBtn.Cursor := crHand; //backBtn.Parent := WizardForm; backBtn.Width := 64; backBtn.Height := 29; backBtn.Left := NextButton.Left + 95 +10 ; backBtn.Top := NextButton.Top; backBtn.Bitmap.LoadFromFile(ExpandConstant('{tmp}\backBtn1.bmp')); backBtn.OnClick:= @settingbcbtn; backBtn.OnMouseDown := @backBtn_ndown; backBtn.OnMouseUp:[email protected]_nup; backBtn.OnMouseEnter := @backBtn_nys; backBtn.OnMouseLeave := @backBtn_nMouseLeave; //setbtn := TLabel.Create(WizardForm); //setbtn.Parent := WizardForm; //setbtn.Font.Name := '微软雅黑'; //setbtn.Font.Size := 9 //setbtn.Font.Color := $0075FFDD; //setbtn.Font.Style := [fsUnderline]; //setbtn.Transparent := True; //setbtn.Cursor:= MyCursor2; //setbtn.AutoSize := True; //setbtn.WordWrap := True; //setbtn.OnClick :[email protected]; //setbtn.Caption := ExpandConstant('高级选项'); //setbtn.SetBounds(ScaleX(20), ScaleY(WizardForm.Top + 120), 50, ScaleY(16)); //setbcbtn := TLabel.Create(WizardForm); //setbcbtn.Parent := WizardForm; //setbcbtn.Font.Name := '微软雅黑'; //setbcbtn.Font.Size := 9 //setbcbtn.Font.Color := $0075FFDD; //setbcbtn.Font.Style := [fsUnderline]; //setbcbtn.Transparent := True; //setbcbtn.Cursor:= MyCursor2; //setbcbtn.AutoSize := True; //setbcbtn.WordWrap := True; //setbcbtn.OnClick :[email protected]; //setbcbtn.Caption := ExpandConstant('返回安装'); //setbcbtn.SetBounds(setbtn.left, setbtn.top, 50, ScaleY(16)); //WizardForm WizardForm.OuterNotebook.Hide; WizardForm.BeveledLabel.Width := 0 WizardForm.BeveledLabel.Height := 0 //CancelButton WizardForm.CancelButton.Width:= 0 WizardForm.CancelButton.Height:= 0 //BackButton WizardForm.BackButton.Width:= 0 WizardForm.BackButton.Height:= 0 //NextButton WizardForm.NextButton.Width:= 0 WizardForm.NextButton.Height:= 0 //大标签 bigLabel := TLabel.Create(WizardForm); bigLabel.Parent := WizardForm; //bigLabel.Font.Name := '微软雅黑'; bigLabel.Font.Name := 'Microsoft YaHei'; bigLabel.Font.Size := 20 bigLabel.Font.Style := [fsBold]; bigLabel.Font.Color := clWhite; bigLabel.Transparent := True; bigLabel.AutoSize := True; bigLabel.SetBounds(ScaleX(10), ScaleY(25), ScaleY(300), ScaleY(30)); bigLabel.Caption := '{#MyAppName} 安装包' bigLabel.Show; //安装版本 sversion := TLabel.Create(WizardForm); sversion.Parent := WizardForm; //sversion.Font.Name := '微软雅黑'; sversion.Font.Name := 'Microsoft YaHei'; sversion.Font.Size := 9 sversion.Font.Style := [fsBold]; sversion.Font.Color := clWhite; sversion.Transparent := True; sversion.AutoSize := False; sversion.SetBounds(ScaleX(10), ScaleY(75), ScaleY(300), ScaleY(16)); //sversion.Caption := '安装版本:0001.0000.0001.0002' sversion.Caption := '{#SversionCaption}'; //添加桌面快捷方式复选框 TaskBox1 := TCheckBox.Create(WizardForm); TaskBox1.Parent := WizardForm; TaskBox1.Left := (WizardForm.Width - 446 - 98)/2; //TaskBox1.Top := ScaleY(413); TaskBox1.Top := WizardForm.Height -(16 + 40) TaskBox1.Width := ScaleY(13); TaskBox1.Height := ScaleY(13); TaskBox1.Checked := True; TaskBox1Label := TLabel.Create(WizardForm); TaskBox1Label.Parent := WizardForm; //位置 TaskBox1Label.Caption := '创建桌面快捷方式'; //控件文字 '#13' TaskBox1Label.WordWrap := True; TaskBox1Label.Font.Name := '宋体'; TaskBox1Label.Font.Size := 9 //字体大小 TaskBox1Label.Font.Color := $00000000; //控件文字颜色 TaskBox1Label.Font.Style := [] TaskBox1Label.Transparent := True; //控件透明显示 TaskBox1Label.Left := TaskBox1.Left + TaskBox1.Width + 3//ScaleX(0); TaskBox1Label.Top := TaskBox1.Top + 1; TaskBox1Label.Width := 100 TaskBox1Label.Height := TaskBox1.Height; TaskBox1Label.OnClick := @TaskBox1LabelOnClick; //-------------------------------------- //目录浏览框 dirviewImage := TBitmapImage.Create(WizardForm); dirviewImage.ShowHint := True; dirviewImage.Cursor := crHand; dirviewImage.Parent := WizardForm; dirviewImage.Width := 446 dirviewImage.Height := 36 dirviewImage.Left := TaskBox1.Left; //dirviewImage.Top := WizardForm.Top -20; dirviewImage.Top := WizardForm.Height -(16 + 130) dirviewImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\DirImg.bmp')); //浏览按钮 dirCooseImage := TBitmapImage.Create(WizardForm); dirCooseImage.ShowHint := True; dirCooseImage.Cursor := crHand; dirCooseImage.Parent := WizardForm; dirCooseImage.Width := 94; dirCooseImage.Height := 36; dirCooseImage.Left := dirviewImage.Left + 446; dirCooseImage.Top := dirviewImage.Top; dirCooseImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\btn_by1.bmp')); dirCooseImage.OnClick:= @NewDirBrowseButtonClick; dirCooseImage.OnMouseDown := @btn_bydown; dirCooseImage.OnMouseUp:[email protected]_byup; dirCooseImage.OnMouseEnter := @btn_bys; dirCooseImage.OnMouseLeave := @btn_byMouseLeave; //安装目录 NewLabel := TLabel.Create(WizardForm); NewLabel.Parent := WizardForm; NewLabel.Font.Name := '宋体'; NewLabel.Font.Size := 9 NewLabel.Font.Color := $00000000; NewLabel.Font.Style := [] NewLabel.Transparent := True; NewLabel.AutoSize := False; NewLabel.WordWrap := True; NewLabel.Left := dirviewImage.Left NewLabel.Top := WizardForm.Height -(16 + 150) NewLabel.Width := WizardForm.Width - ScaleX(40); NewLabel.Height := ScaleY(14); //文字路径 NewDirEdit:=TLabel.Create(WizardForm); NewDirEdit.Parent:=WizardForm; NewDirEdit.Transparent:=True; NewDirEdit.Left:=30; NewDirEdit.Top:=dirviewImage.top+9; NewDirEdit.Font.Style := [fsBold]; //NewDirEdit.Font.Color := $0075FFDD; NewDirEdit.Font.Color := $00000000; //NewDirEdit.WordWrap := true; NewDirEdit.Width:= 446; //NewDirEdit.Cursor:= MyCursor2; //NewDirEdit.OnClick := @NewDirBrowseButtonClick; NewDirEdit.hide; //添加开始菜单程序组快捷方式 TaskBox3 := TCheckBox.Create(WizardForm); TaskBox3.Parent := WizardForm; TaskBox3.Left := TaskBox1.Left; TaskBox3.Top := TaskBox1.Top + 24; TaskBox3.Width := TaskBox1.Width TaskBox3.Height := TaskBox1.Height TaskBox3.Checked := True; TaskBox3Label := TLabel.Create(WizardForm); TaskBox3Label.Parent := WizardForm; //位置 TaskBox3Label.Caption := '创建开始菜单程序组快捷方式'; TaskBox3Label.WordWrap := True; TaskBox3Label.Font.Name := '宋体'; TaskBox3Label.Font.Size := 9 //字体大小 TaskBox3Label.Font.Color := $00000000; //控件文字颜色 TaskBox3Label.Font.Style := [] TaskBox3Label.Transparent := True; //控件透明显示 TaskBox3Label.Left := TaskBox3.Left + TaskBox3.Width + 3//ScaleX(0); TaskBox3Label.Top := TaskBox3.Top + 1; TaskBox3Label.Width := 100; TaskBox3Label.Height := TaskBox3.Height; TaskBox3Label.OnClick := @TaskBox3LabelOnClick; //NewStatusLabel NewStatusLabel := TLabel.Create(WizardForm); NewStatusLabel.Parent := WizardForm; //位置 NewStatusLabel.Font.Size := 9 //字体大小 NewStatusLabel.Font.Color := clWhite; //控件文字颜色 NewStatusLabel.Font.Style := []//[fsBold, fsItalic, fsUnderline]; //控件风格:粗体、斜体、下划线 NewStatusLabel.Transparent := True; //控件透明显示 NewStatusLabel.Left := 20 NewStatusLabel.Top := 275; NewStatusLabel.Width := NewLabel.Width; NewStatusLabel.Height := ScaleY(14); //安装百分比 ProgressLabel := TLabel.Create(WizardForm); ProgressLabel.Top := 255; ProgressLabel.Left:= 20; ProgressLabel.Font.Color :=clWhite; ProgressLabel.AutoSize := True; ProgressLabel.Transparent := True; ProgressLabel.Parent := WizardForm; //ProgressGauge WizardForm.ProgressGauge.Left:=NewLabel.Left; WizardForm.ProgressGauge.Top:=NewStatusLabel.Top + NewStatusLabel.Height + 5; WizardForm.ProgressGauge.Width:=NewLabel.Width; WizardForm.ProgressGauge.Height:=21 WizardForm.ProgressGauge.Min:=0 WizardForm.ProgressGauge.Max:=100 WizardForm.ProgressGauge.Parent := WizardForm; //安装细节 //DetaList DetaList := TNewListBox.Create(WizardForm); DetaList.Parent := WizardForm; DetaList.Left := 275; DetaList.Top := 20; DetaList.Width := NewLabel.Width; DetaList.Height := ScaleY(188); DetaList.TabOrder := ScaleY(4); DetaList.Visible := False; // True默认不显示 DetaList.Color := $00FAF7F2 //细节框颜色 //ShowDetaBtn ShowDetaBtn := TNewButton.Create(WizardForm); ShowDetaBtn.Parent := WizardForm; ShowDetaBtn.Left := DetaList.Left ShowDetaBtn.Top := DetaList.Top; ShowDetaBtn.Width := ScaleX(75); ShowDetaBtn.Height := ScaleY(22); ShowDetaBtn.Caption := '显示细节(&D)'; ShowDetaBtn.TabOrder := ScaleY(3); ShowDetaBtn.Visible := True; // False默认显示 ShowDetaBtn.OnClick := @ShowDetaBtnOnClick; //FinishedLabel3 FinishedLabel3 := TLabel.Create(WizardForm); FinishedLabel3.Parent := WizardForm; //位置 FinishedLabel3.Caption := ExpandConstant('{cm:FinishedHeadingLabel}'); //控件文字 '#13' FinishedLabel3.WordWrap := True; FinishedLabel3.Font.Name := '宋体'; FinishedLabel3.Font.Size := 9 //字体大小 FinishedLabel3.Font.Color := clWhite; //控件文字颜色 FinishedLabel3.Font.Style := []//[fsBold, fsItalic, fsUnderline]; //控件风格:粗体、斜体、下划线 FinishedLabel3.Transparent := True; //控件透明显示 FinishedLabel3.Left := ScaleX(60); FinishedLabel3.Top := ScaleY(100); FinishedLabel3.Width := ScaleY(435); FinishedLabel3.Font.Style := [fsBold]; FinishedLabel3.OnMouseDown:[email protected]; //程序1 RunBox1 := TCheckBox.Create(WizardForm); RunBox1.Parent := WizardForm; RunBox1.Left := FinishedLabel3.Left; RunBox1.Top := FinishedLabel3.Top + FinishedLabel3.Height + ScaleY(30); RunBox1.Width := ScaleY(13); RunBox1.Height := ScaleY(13); RunBox1.Checked := false//True; RunBox1Label := TLabel.Create(WizardForm); RunBox1Label.Parent := WizardForm; //位置 RunBox1Label.Caption := '立即启动酷狗7'; //控件文字 '#13' RunBox1Label.WordWrap := True; RunBox1Label.Font.Name := '宋体'; RunBox1Label.Font.Size := 9 //字体大小 RunBox1Label.Font.Color := clWhite; //控件文字颜色 RunBox1Label.Font.Style := []//[fsBold, fsItalic, fsUnderline]; //控件风格:粗体、斜体、下划线 RunBox1Label.Transparent := True; //控件透明显示 RunBox1Label.Left := RunBox1.Left + RunBox1.Width + 3//ScaleX(0); RunBox1Label.Top := RunBox1.Top + 1; RunBox1Label.Width := FinishedLabel3.Width - RunBox1.Width - 3; RunBox1Label.Height := ScaleY(50); RunBox1Label.OnClick := @RunBox1LabelOnClick; dirviewImage.Hide; NewLabel.hide; NextButton.Hide; dirCooseImage.Hide; NewLabel.Hide; end; //安装细节 procedure AddToDetaList; begin NewStatusLabel.Caption := '抽取: ' + ExtractFileName(CurrentFileName) //仅显示文件名称 DetaList.Items.Append('抽取: ' + ExtractFileName(CurrentFileName)); //滚动 DetaList.ItemIndex := DetaList.Items.Count - 1; end; function StatusMsg(MyMsg: string): Boolean; begin Result:= True; NewStatusLabel.Caption:= MyMsg; end; procedure Progress(); begin //安装百分比 ProgressLabel.Caption:= IntToStr((WizardForm.ProgressGauge.Position-WizardForm.ProgressGauge.Min)/((WizardForm.ProgressGauge.Max - WizardForm.ProgressGauge.Min)/101)) + '%'; if((WizardForm.ProgressGauge.Position-WizardForm.ProgressGauge.Min)/((WizardForm.ProgressGauge.Max - WizardForm.ProgressGauge.Min)/101)>=100) then begin ProgressLabel.Caption:= IntToStr(99) + '%'; end; end; procedure CurPageChanged(CurPageID: Integer); begin // Notice.hide NewLabel.hide TaskBox1.hide TaskBox1Label.hide // TaskBox2.hide // TaskBox2Label.hide TaskBox3.hide TaskBox3Label.hide NewStatusLabel.hide ProgressLabel.hide WizardForm.ProgressGauge.hide DetaList.hide ShowDetaBtn.hide FinishedLabel3.hide RunBox1.hide RunBox1Label.hide NextButton.hide //setbcbtn.hide NewDirEdit.hide bigLabel.hide sversion.hide //setbtn.hide if CurPageID = wpWelcome then begin WizardFormImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\window.bmp')) // Notice.show end; if CurPageID = wpSelectDir then begin WizardFormImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\window.bmp')) NextButton.show NewLabel.show NewLabel.Font.Style := [fsBold]; TaskBox1.hide TaskBox1Label.hide //TaskBox2.hide // TaskBox2Label.hide TaskBox3.hide TaskBox3Label.hide NewDirEdit.show bigLabel.show sversion.show //setbtn.show end; if CurPageID = wpInstalling then begin WizardFormImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\window.bmp')) NewStatusLabel.show ProgressLabel.show WizardForm.ProgressGauge.hide ShowDetaBtn.hide bigLabel.show sversion.show //--------------- //目录浏览框 dirviewImage.Hide; //选择目录 dirCooseImage.Hide; //自定义安装 zdyianZhuangImage.Hide; //快速安装 ksuanZhuangImage.Hide; //返回 backBtn.Hide; end; if CurPageID = wpFinished then begin WizardFormImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\window.bmp')) FinishedLabel3.show RunBox1.show RunBox1Label.show end; end; //快捷方式 Function desktopicon(): Boolean; begin if TaskBox1.Checked = True then //当TaskBox1选中时,执行操作 Result := TaskBox1.Checked; end; Function quicklaunchicon(): Boolean; begin if TaskBox2.Checked = True then //当TaskBox2选中时,执行操作 Result := TaskBox2.Checked; end; Function groupicon(): Boolean; begin if TaskBox3.Checked = True then //当TaskBox3选中时,执行操作 Result := TaskBox3.Checked; end; procedure DeinitializeSetup(); begin MainForm.Hide; WizardForm.Hide; UninitTrayIconCtrl(); end; //安装结束,点"完成"之后运行程序 //procedure CurStepChanged(CurStep: TSetupStep); //var //RCode: Integer; //begin ////程序1 //if (CurStep=ssDone) and (RunBox1.Checked) then //Exec(ExpandConstant('{app}\MyProg.exe'), '', '', SW_SHOW, ewNoWait, RCode); ////程序2 ////if (CurStep=ssDone) and (RunBox2.Checked) then ////Exec(ExpandConstant('{app}\MyProg.exe'), '', '', SW_SHOW, ewNoWait, RCode); //end;
一些需要注意的地方:
1、inno setup 的版本是否支持字体不同分辨率的适配。
2、在非中文系统上是否会造成乱码。
3、360是否会报毒或者高风险。
4、覆盖安装的时候是否提示。
5、是否允许同时允许多个安装包。
6、安装时如果程序正在运行要进行提示。
以上是关于一个相对完整的inno setup的主要内容,如果未能解决你的问题,请参考以下文章
安装到 USB 驱动器根目录时出现 Inno Setup 错误:“您必须输入带有驱动器号的完整路径”
Inno Setup CreateProcess 失败:代码 740(Inno Setup打包的程序提升为管理员权限)