此篇文檔主要講述了如何使用Inno Setup制作安裝包,如果要打包的内容已經準備好,可以跳過“QT操作”部分。
QT操作
1.在QT中将編譯模式設定成Release,點選編譯後在檔案夾中找到生成exe檔案,并将其複制出來單獨放到一個檔案夾中。
2.考慮到使用者可能将軟體安裝到Program Files (x86)等系統檔案夾中,此時如果程式沒有管理者權限會出現一些問題,是以可以給編譯出的exe添加管理者權限。在工程檔案夾中,pro檔案的同目錄下建立一個.manifest檔案,這裡筆者用getAdmin.manifest舉例。向getAdmin.manifest中寫入下列代碼。
1. <?xml version='1.0' encoding='UTF-8' standalone='yes'?>
2.<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
3. <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
4. <security>
5. <requestedPrivileges>
6. <requestedExecutionLevel level='requireAdministrator' uiAccess='false' />
7. </requestedPrivileges>
8. </security>
9. </trustInfo>
10.</assembly>
然後找到與工程編譯出的exe檔案同名的.rc檔案,向其中添加下列代碼。
1.1 24 DISCARDABLE "getAdmin.manifest"
如果沒有找到.rc檔案,可以自己建立一個,這裡筆者使用getAdmin.rc舉例。向建立的getAdmin.rc檔案中寫入上述代碼,然後在QT中打開pro檔案添加下列語句。
2.RC_FILE += getAdmin.rc
以管理者身份運作重新運作QT點選編譯,如果此時編譯出的exe檔案圖示的右下角有小盾牌标志,則代表管理者權限添加成功。
3.通過搜尋找到QT 5.14.2(MinGW),版本根據QT工程的編譯器選擇,如果是32-bit的編譯器,那麼MinGW就使用32位版本。如果QT工程使用的是MSVC編譯器,這裡也選擇同版本的MSVC編譯器。
4.打開後,輸入"cd exe檔案的路徑"來使該工具找到exe檔案存儲位置。然後輸入"windeployqt 檔案名稱.exe",該工具會自動添加此exe檔案需要的.dall檔案。但是該工具添加的.dall檔案不一定齊全,是以.dall檔案自動添加完畢後,手動點選exe檔案,如果報錯,則根據提示資訊,在QT安裝檔案夾找到對應的dall檔案并手動添加。直到點選exe後能正常打開使用。
Inno Setup操作
1.打開Inno Setup後,選擇使用向導,根據提示建立一個腳本模闆。
2.點下一步,填寫程式資訊。
3.點選浏覽,選擇之前準備好的exe檔案。點選添加檔案,把exe檔案同一目錄下的其它檔案全部添加。點選添加檔案夾,把exe檔案目錄下的其它檔案夾全部添加。完成後點選下一步。
4.根據需求選擇建立快捷方式,完成點下一步。
5.許可檔案不是必要的,點選浏覽可添加安裝前和安裝後顯示資訊檔案,安裝前顯示資訊檔案通常為使用者協定。支援txt和rtf檔案格式,添加完成後點選下一步。
6.語言選擇中文。
7.選擇編譯出的安裝包的儲存位置、名稱和圖示,安裝密碼可以不用設定。
8.勾選"是,使用#define編譯指令",點選下一步完成模闆建立。此時會彈出一個提示框詢問“是否立即開始編譯”,點選否。
9.對模闆生成的添加檔案夾的代碼進行修改。向導生成的模闆代碼,會把檔案夾中的檔案複制到exe同一目錄下,并删除原本的檔案夾,這會導緻安裝後的exe檔案報錯。将代碼修改成如下格式,點選編譯即可得到一個最簡單的安裝包。
1.Source: "C:\Users\21195\Desktop\11\platforms\*"; DestDir: "{app}\platforms"; Flags: ignoreversion recursesubdirs createallsubdirs
2.Source: "C:\Users\21195\Desktop\11\iconengines\*"; DestDir: "{app}\iconengines"; Flags: ignoreversion recursesubdirs createallsubdirs
10.在wpInfoBefore頁面,即“顯示安裝前檔案”的那個頁面,添加一個複選框。複選框顯容為“筆者已閱讀,并同意該協定”,并将該頁面的 “下一步”按鈕預設設定為不可用。隻有使用者勾選複選框,表示同意協定,才能點選下一步繼續安裝,代碼如下。
1. var
2. AgreementCheckBox: TNewCheckBox;
3. procedure AgreementCheckBoxClick(Sender: TObject);
4. begin
5. // 更新下一步按鈕的狀态
6. WizardForm.NextButton.Enabled := AgreementCheckBox.Checked;
7. end;
8. procedure InitializeWizard;
9. begin
10. // 建立一個複選框控件
11.
12. AgreementCheckBox := TNewCheckBox.Create(WizardForm);
13. AgreementCheckBox.Parent := WizardForm.InfoBeforePage;
14. AgreementCheckBox.Left := WizardForm.InfoBeforePage.Left + ScaleX(0);
15. AgreementCheckBox.Top := WizardForm.InfoBeforePage.Height - ScaleY(22);
16. AgreementCheckBox.Width := WizardForm.InfoBeforePage.ClientWidth - Scale X(16);
17. AgreementCheckBox.Caption := '筆者已閱讀,并同意該協定';
18. AgreementCheckBox.Checked := False;
19. AgreementCheckBox.OnClick := @AgreementCheckBoxClick;
20.
21. end;
22. procedure CurPageChanged(CurPageID: Integer);
23. begin
24. // 在InfoBeforePage頁面時禁用下一步按鈕
25. if CurPageID = wpInfoBefore then
26. WizardForm.NextButton.Enabled := False;
27. end;
11.為了避免安裝時因權限不足發出發生錯誤,可以給安裝包添加管理者權限。在腳本的[Setup]節點添加 PrivilegesRequired=admin。進入Inno Setup安裝根目錄,找到檔案SetupLdr.e32,這是一個二進制配置檔案,需要用到ResHacker.exe這個工具修改。找到<requestedExecutionLevel level="asInvoker" uiAccess="false"/></requestedPrivileges>,修改為<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/></requestedPrivileges>,如下圖所示。重新編譯後若安裝包右下角出現小盾牌,則管理者權限添加成功。
其他文章閱讀推薦:
《革新而來!強适應性序列槽伺服器,RJ45與序列槽雙向互轉+多通信機制》
《高性能低延遲4G CAT1子產品,4G全網通+高精度定位》
《LoRa微型DTU,颠覆設計!無線數傳電台體積竟能如此小》
《三種低功耗模式,多路Socket,超低功耗無順序列槽Wi-Fi子產品》