; 脚本由 Inno Setup 脚本向导 生成!
; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档!
#define MyAppName "软件名称"
#define MyAppVersion "1.0"
#define MyAppPublisher "发布软件公司"
; 发布公司网址
#define MyAppURL "http://www.baidu.com/"
;可执行文件
#define MyAppExeName "baidu.exe"
[Setup]
; 注: AppId的值为单独标识该应用程序。
; 不要为其他安装程序使用相同的AppId值。
; (生成新的GUID,点击 工具|在IDE中生成GUID。)
;此ID是唯一的软件标识可利用此标识判断软件是否已经安装
AppId={{FFkk9261-119D-47D9-9AE8-AB8EAFE2DF1E}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup
SetupIconFile=D:\安装包图标.ico
Compression=lzma
SolidCompression=yes
; 在 Windows添加删除程序 对话框中,显示的卸载名称
UninstallDisplayName=我的程序
; 在 Windows添加删除程序 对话框中,显示的卸载图标
UninstallDisplayIcon=卸载图标.ico
WizardImageFile=安装软件面板左侧图片.bmp
WizardSmallImageFile=安装软件右侧小图片.bmp
[Languages]
Name: "chinesesimp"; MessagesFile: "compiler:Default.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: checkablealone; OnlyBelowVersion: 0,6.1
[Files]
Source: "各种dll各种文件路径"; DestDir: "{app}"; Flags: ignoreversion
;加载文件夹下文件
;下面这句是要在安装目录下存放创建AAAA文件夹,并将Sourse目录文件夹下的所有文件放到此AAAA文件夹下
Source: "D:\AAAA\*"; DestDir: "{app}\AAAA"; Flags: ignoreversion overwritereadonly ignoreversion recursesubdirs createallsubdirs
; 注意: 不要在任何共享系统文件上使用“Flags: ignoreversion”
; NOTE: Don't use "Flags: ignoreversion" on any shared system files;卸载图标位置
Source: "卸载图标.ico"; Flags: solidbreak dontcopy
;卸载插件位置
Source: "D:\UpdateIcon.dll"; Flags: solidbreak dontcopy
Source: "D:\delete.ico"; DestDir: "{app}"; Flags: ignoreversion
[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" ; IconFilename: "{app}\快速启动栏软件启动图标.ico"
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}" ; IconFilename: "{app}\快速启动栏软件卸载图标.ico"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon ; IconFilename: "{app}\桌面快捷方式图标.ico"
[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
[code]
function InitializeSetup():boolean;
var
MykeynotExist:boolean;
ResultCode: Integer;
uicmd: String;
Path:string ;
ResultCode1: Integer;
dotNetV4RegPath:string;
begin
MykeynotExist:= true;
if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{FFkkk261-119D-47D9-9AE8-AB8EAFE2DF1E}_is1', 'UninstallString', uicmd) then
begin
MykeynotExist:= false;
if MsgBox('系统检测到您已经安装软件,是否卸载重新安装?', mbConfirmation, MB_YESNO) = idYes then
begin
Exec(RemoveQuotes(uicmd), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
end
end;
Result:= MykeynotExist
dotNetV4RegPath:= 'SOFTWARE/Microsoft/.NETFramework/Policy/v4.0'
if RegKeyExists(HKLM, dotNetV4RegPath) then
begin
Result := true;
end
else
begin
if MsgBox('系统检测到您没有安装.Net Framework4.0,是否立刻下载并安装?', mbConfirmation, MB_YESNO) = idYes then
begin
Path := ExpandConstant('{pf}/Internet Explorer/iexplore.exe');
Exec(Path, 'http://www.microsoft.com/zh-cn/download/confirmation.aspx?id=17718', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode1);
MsgBox('请安装好.Net Framework4.0环境后,再运行本安装包程序!',mbInformation,MB_OK);
Result := false;
end
else
begin
MsgBox('没有安装.Net Framework4.0环境,无法运行软件,本安装程序即将退出!',mbInformation,MB_OK);
Result := false;
end;
end;
end;
// function InitializeSetup():boolean;
//var Path:string ;
// ResultCode: Integer;
// begin
//end;
//插件函数用法
//参数: 句柄(插件错误对话框的父句柄), exe文件完整路径名称, (exe文件中要替换的)图标资源名称, 图标文件的完整路径名称, (exe中要替换的图标资源所在)语系
//返回值: 成功 = Tr, 失败 = False
function UpdateIcon(const hWnd: Integer; const exeFileName, exeIcon, IcoFileName: String; wlangID: DWORD): Boolean;
external 'UpdateIcon@files:UpdateIcon.dll stdcall';
//替换卸载程序的图标
function UpdateUninstIcon(const IcoFileName: String): Boolean;
begin
//要替换图标的exe文件路径名称留空,则插件会自动替换掉Inno卸载程序的图标,其它参数类似!
Result:= UpdateIcon(MainForm.Handle, '', '', IcoFileName, 0);
//替换卸载图标
end;
procedure CurStepChanged(CurStep: TSetupStep);
var
sIcon: String;
begin
//注意: 替换卸载程序的图标,必须是在卸载程序生成之前!
//安装图标与卸载图标的格式与大小一致,否则可能会导致卸载程序出错!
if CurStep=ssInstall then
begin
sIcon:= ExpandConstant('{tmp}\卸载图标.ico'); //定义卸载图标
ExtractTemporaryFile(ExtractFileName(sIcon)); //释放卸载图标
//要替换图标的exe文件路径名称留空,则插件会自动替换掉Inno卸载程序的图标!
UpdateUninstIcon(sIcon);//替换卸载图标
end;
end;
[Messages]
BeveledLabel=安装面板下面横线左侧文本
首先判断是否已经安装此软件→检测运行环境→安装
此篇关于打包工具innosetup的使用和理解都是作者亲身应用,做笔记以便后用!
注意:不知道什么原因
RegKeyExists(HKLM, 'SOFTWARE\Microsoft\.NETFramework\policy\v4.0')这样写判断不出版本的
dotNetV4RegPath:='SOFTWARE\Microsoft\.NETFramework\policy\v4.0';
RegKeyExists(HKLM, dotNetV4RegPath)
通过dotNetV4RegPath变量来运行RegKeyExists没问题!