最近打包用到了Inno setup,在這個過程中容易犯一些低階錯誤,特別寫出來已提醒自己
1.打包資料夾
打包檔案按照嚮導來一般沒什麼問題,但資料夾就不一樣了。嚮導生成的打包資料夾的程式碼如下:
- Source: "D:MyProject/XX/*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
它解壓時直接把XX目錄下的所以檔案拷貝到安裝目錄下,而沒有生成XX目錄,程式如果要引用XX目錄下的檔案就會出現錯誤。
我改成這樣就不會有事了(也許嚮導可以生成,我還不清楚)
- Source: "D:MyProject/XX/*"; DestDir: "{app}/XX"; Flags: ignoreversion recursesubdirs createallsubdirs
2.桌面圖示
嚮導預設生成的程式碼不會給你的應用程式加上圖示,同時也不會在開始程式選單里加上解除安裝程式的快捷方式
- Name: "{group}/XX"; Filename: "{app}/XX.exe"
- Name: "{group}/{cm:UninstallProgram,XX}"; Filename: "{uninstallexe}"
- Name: "{commondesktop}/XX"; Filename: "{app}/XX.exe";IconFileName:"{app}/res/XX.ico"; Tasks: desktopicon
在Icons下新增這些程式碼就可以做到。
3.安裝程式時要註冊某些ocx控制元件或DLL
我自己的做法是些一個bat指令碼來註冊ocx或者dll,放在自動Run下,在程式執行之前執行它。當然Inno setup裡面也有這樣的指令碼程式碼
4.如果程式執行需要一些元件支援,比如.NetFrameWork,在解壓時就要檢測系統是否安裝了.NetFrameWork
- [code]
- function CheckDotNet4_0():boolean;
- begin
- Result:=not RegKeyExists(HKLM, 'SOFTWARE/Microsoft/.NETFramework/policy/v4.0');
- end;
- function InitializeSetup(): Boolean;
- var Path:string;
- ResultCode: Integer;
- begin
- if CheckDotNet4_0() then
- begin
- ExtractTemporaryFile('dotNetFx40_Full_x86_x64.exe');
- Exec(ExpandConstant('{tmp}/dotNetFx40_Full_x86_x64.exe'), '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
- end
- end;