一个相对完整的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的主要内容,如果未能解决你的问题,请参考以下文章

Inno Setup 需要管理员登录才能在重启后完成

Inno Setup执行SQL脚本的方法

安装到 USB 驱动器根目录时出现 Inno Setup 错误:“您必须输入带有驱动器号的完整路径”

Inno Setup CreateProcess 失败:代码 740(Inno Setup打包的程序提升为管理员权限)

Inno Setup5 如何更改卸载图标(我做出来的安装程序和卸载的一样)我想把卸载图标换成别的。

C/S打包 客户端/windows程序 Inno Setup