使用Inno Setup制作安装程序

Inno Setup 介绍

官方网站
帮助文档

引自维基百科
Inno Setup是一个免费的安装程序制作软件,可以方便而有效率地制作出安装程序。Inno Setup设计了一套脚本语言,用户利用该脚本语言设计安装流程,然后经过Inno Setup的编译,即可产生安装程序。由于Inno Setup免费、简单易学且功能强大,自1997年问世后便迅速成为广受欢迎的安装程序制作软件,与性质相似的NSIS共同占据了高比例的用户市场。

Inno Setup目录常量

参考连接1
参考连接2

中文语言包

参考链接

常用Pascal代码

判断程序是否已安装

[Code]
function InitializeSetup(): Boolean;
var
ErrorCode:integer;
UninstallFile:string;
begin
  result:=true;
  RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\程序名称_is1', 'UninstallString', UninstallFile);
  if FileExists(RemoveQuotes(UninstallFile)) then
  begin
    result:=false;
    if msgbox('检查到您计算机上已安装有"程序名称"。安装新版本,需先卸载旧版本,你确定要卸载它吗?', mbConfirmation,MB_YESNO or MB_DEFBUTTON2)=IDYES then
      ShellExec('open', UninstallFile,'', '', SW_SHOW, ewNoWait, ErrorCode);
    exit;
  end;
end;

检查.NET Freamwork版本

参考链接

(1)在线下载

[code]
function InitializeSetup: Boolean;
var Path:string ;
    ResultCode: Integer;
begin
  if RegKeyExists(HKLM, 'SOFTWARE/Microsoft/.NETFramework/policy/v2.0') then
  begin
    Result := true;
  end
  else
  begin
    if MsgBox('系统检测到您没有安装.Net Framework2.0,是否立刻下载并安装?', mbConfirmation, MB_YESNO) = idYes then
    begin
      Path := ExpandConstant('{pf}/Internet Explorer/iexplore.exe');
      Exec(Path, 'http://www.xxx.com/down/dotnetfx2.exe', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
      MsgBox('请安装好.Net Framework2.0环境后,再运行本安装包程序!',mbInformation,MB_OK);
      Result := false;
    end
    else
    begin
      MsgBox('没有安装.Net Framework2.0环境,无法运行XXX程序,本安装程序即将退出!',mbInformation,MB_OK);
      Result := false;
    end;
  end;
end;

(2)打包进安装文件

[Files]
Source: "文件路径/dotnetfx20.exe"; DestDir: "{tmp}"; Flags: ignoreversion
; 提示:dotnetfx20.exe并不会拷贝到安装后的目录中,而是在临时目录中,这样重启机器之后就会被删除掉

[code]
function CheckDotNet2_0():boolean;
begin
Result:=not RegKeyExists(HKLM, 'SOFTWARE/Microsoft/.NETFramework/policy/v2.0');
end;

function InitializeSetup(): Boolean;
var Path:string;
    ResultCode: Integer;
begin
  if CheckDotNet2_0() then
  begin
    ExtractTemporaryFile('dotnetfx20.exe');
    Exec(ExpandConstant('{tmp}/dotnetfx20.exe'), '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
  end;
  Result:=true;  
end;




Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>