Inno Setup制作安装包教程

Inno Setup Compiler汉化版启动软件后的界面:

选择“创建新的空白脚本文件”,点击【新建】空白脚本

直接【下一步】:

填好各项目内容然后【下一步】

在应用程序基本目的目录的下拉选项里包括:【程序应用文件夹】和【自定义】,可自定义安装路径;程序应用文件夹就是将文件安装到: C:\Program Files\,其他的就相应的填.然后【下一步】

这一步要注意,在图中的1处填上主程序文件(建议用浏览的方法),然后按添加文件,添加要安装在C:\Program Files\ePSXe里的文件.再按添加目录(只能一个个添加,要是子目录多就烦了).把要安装的目录全部添加完后,记住一定要编辑所添加的目录,要不全部文件都会安装在C:\Program Files\ePSXe里!步骤是:在2里选添加的目录后按编辑

这里可以取消[允许用户在安装完成后启动应用程序],使程序安装完成后不自动运行;若要使程序在安装完成后自动运行,须在制作生成安装包前修改InnoSetup的编译脚本,否则程序首次自运行时会出错!具体脚本编译见下文

在1处填上子止录的名称,在2里还有其它选择,可以将其它的一些文件安装在WINDOWS,SYSTEM等其它目录里

其它的目录同样方法设置好,接着【下一步】

【下一步】

填好就【下一步】

【下一步】

【下一步】

然后按【完成】,程式问你是否对脚本进行编译,要你觉得可以了,那就让它编译,就会生成一个SETUP.EXE文件,大功就告成了!若你想修改修改那就按否,可以对脚本进行修改(比如在注册表加信息,在程序组加一个选项等等),当然就要知道它的语法了!一听到语法也许你就怕,其实它的语法是不难的,在帮助里一下就能看明白.只要你学过一点点编程.再说,大部分的东东已自动生成了.正好,我这个例子要在程序组里加一个英文版的快捷方式,且要修改快捷方式的工作目录!要不然,程序在用快捷方式启动后工作不了!(因为此程序要在快捷方式的工作目录里找其它文件!建议制作安装程序都修改工作目录,以免不正常)

脚本修改完成后,【编译】,然后会在之前指定的程序生成路径中生成安装文件!

至於语法,可在【帮助】的Inno Setup帮助资料里找到;

 

脚本编译相关的问题:

1、要在程序组里加一个英文版的快捷方式,且要修改快捷方式的工作目录!要不然,程序在用安装完成后自启动用快捷方式启动时工作不了!(因为此程序要在快捷方式的工作目录里找其它文件!建议制作安装程序都修改工作目录,以免不正常)

  修改前:
    ...
    [Icons]
    Name: "{group}\ePSXe 1.50 汉化版"; Filename: "{app}\p-epsxe.exe"
    Name: "{userdesktop}\ePSXe 1.50 汉化版"; Filename: "{app}\p-epsxe.exe"; MinVersion: 4,4; Tasks: desktopicon
    ...
  修改后:
    ...
    [Icons]
    Name: "{group}\ePSXe 1.50 汉化版"; Filename: "{app}\p-epsxe.exe"; WorkingDir: "{app}"
    Name: "{group}\ePSXe 1.50 英文版"; Filename: "{app}\epsxe.exe"; WorkingDir: "{app}"
    Name: "{userdesktop}\ePSXe 1.50 汉化版"; Filename: "{app}\p-epsxe.exe"; MinVersion: 4,4; Tasks: desktopicon; WorkingDir: "{app}"
    ...

2、要在注册表加信息

  ...
  [Registry] 
  Root: HKCU; Subkey: "Software\My Company"; Flags: uninsdeletekeyifempty 
  Root: HKCU; Subkey: "Software\My Company\My Program"; Flags: uninsdeletekey 
  Root: HKLM; Subkey: "Software\My Company"; Flags: uninsdeletekeyifempty 
  Root: HKLM; Subkey: "Software\My Company\My Program"; Flags: uninsdeletekey 
  Root: HKLM; Subkey: "Software\My Company\My Program"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}"
  ...

3、使安装64位程序的默认路径为C:\Program Files\而不是C:\Program Files(X86)\

  只要在inno setup的脚本中加入【ArchitecturesInstallIn64BitMode=x64 】

4、安装的程序在卸载时,如何判断该应用程序是否运行 

  InnoSetup 提供变量AppMutex,用来保存应用程序的Mutex名称。现在很多应用程序都是唯一实例运行。这样避免配置文件被错误修改以及其他很多衍生问题。通常都会用WindowsAPI CreateMuex来创建一个Mutex;安装包卸载时会判断AppMutex是否已经被占用。如果被占用则等待并提示用户关闭应用程序;如果应用程序正在运行,通常该exe文件和被使用的dll是不会被删除的,卸载不完全。
  在Inno Setup Compile 配置中,将MyProgramsMutexName 定义为 "应用程序名-A75DEC53-783F-4425-8431-24D83BD4CE5F"    该字符串需要在被打包的EXE文件中使用。

  #define MyProgramsMutexName "应用程序名-A75DEC53-783F-4425-8431-24D83BD4CE5F"
  [Setup]
  AppMutex={#MyProgramsMutexName}

5、安装的程序在卸载时,删除相关的文件和文件夹

  if CurUninstallStep = usUninstall        判断是否正在卸载

  MsgBox('Do you want to delete all config files and log files?', mbConfirmation, MB_YESNO)        用于弹出消息框,提示用户选择是否删除文件。

  ExpandConstant      用于获取变量值

  FileExists      用于判断文件是否存在

  DeleteFile      用来删除文件

  DirExists       用于检查目录是否存在

  DelTree      用于删除目录和里面的文件

  

  用法:

  //删除整个安装目录文件夹,包括文件夹中的所有文件和文件夹
  [Code]
  procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
  begin
    if CurUninstallStep = usUninstall then begin
   //if MsgBox('Do you want to delete all config files and log files?', mbConfirmation, MB_YESNO)=IDYES then
        DelTree(ExpandConstant('{app}'), True, True, True);
    end;
  end;

  

  [Code]
  procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
  begin
    if CurUninstallStep = usUninstall then begin
      //删除安装目录文件夹中的指定文件,但安装目录文件夹自身不会删除
      if FileExists(ExpandConstant('{app}') + '\pass.log') then  DeleteFile(ExpandConstant('{app}') + '\pass.log');
      if FileExists(ExpandConstant('{app}') + '\user.log') then DeleteFile(ExpandConstant('{app}') + '\user.log');
      //删除安装目录文件夹中的指定文件夹,但安装目录文件夹本身不会删除
      if DirExists(ExpandConstant('{app}') + '\Users\') then DelTree(ExpandConstant('{app}') + '\Users\', true, true, true);
    end;
  end;

posted @ 2018-01-19 13:09  Autumn_n  阅读(5379)  评论(0编辑  收藏  举报
TOP