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;