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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM