使用inno setup 製作安裝包

前面要說的話

最近幾天的工作內容就是改良之前的同事做的安裝包,
小朋友你是否有很多問號~~~
之前也沒接觸過安裝包,領導給了我官網鏈接,讓我研究,搞了3天,最終也就是在同事的基礎上進行了一些簡化內容,大概總結下就是兩方面:

文件複製

一些文件內容需要複製到安裝後的文件夾下,針對不同的組件複製對應的文件夾
舊的腳本里是一個個文件列出來,組件很多或文件很多的情況下,腳本里就是密密麻麻一片,官網的example裏有個
在這裏插入圖片描述
通配符這麼好用的東西之前竟然沒被get到,反正我是用了,腳本瞬間清爽了很多,還有一個點就是,如果指定的文件夾目錄下還有子文件夾,就需要再flags裏添加recursesubdirs createallsubdir
造個我的例子吧:

[files]
Source: "MYFOLDER\A\*"; DestDir: "{app}\A\"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: A
Source:當前文件存放的位置
DestDir:安裝後存放的位置
Components:組件名稱
Flags:標識,如果文件中有子文件夾則添加recursesubdirs createallsubdirs,沒有可不加

之所以這樣統一改的原因主要還是這個安裝包提供給客戶後,希望儘可能不讓客戶去修改我們的安裝包腳本比如說最直觀的好處就是腳本簡潔了,更主要的好處就是:如果針對某一個或多個已有的組件添加了文件的時候,可以直接放在對應的文件夾底下,而不用去修改腳本了

添加註冊表

之前寫進註冊表是按官網來的,在[registry]裏添加相關字段
在這裏插入圖片描述
由於組件太多,字段也非常多,添加會比較麻煩,所以想找個方式可以直接從註冊表文件中將字段導入註冊表,有問題找度娘,找到了解決方案在[run]裏添加執行腳本:

Filename: {win}\regedit.exe; Parameters: /s /MYFOLDER/A/A.reg; Components: A;
Parameters:註冊表存放路徑
Components:組件名稱

同時也遇到個問題:想要在卸載後刪除註冊表。如果是在腳本里添加字段的做法就是直接在flags後添加deletekey,則會在卸載時刪除這個key對應的所有value
如果是執行程序的方式無法用這個操作,所以就參考了https://blog.csdn.net/woshinia/article/details/8174453這篇文章,在我的[code]裏添加上了這段代碼:

//刪除註冊表?
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then

if MsgBox('您是否要刪除註冊信息?', mbConfirmation, MB_YESNO) =
IDNO then//我不需要彈出這個框所以是IDNO
RegDeleteKeyIncludingSubkeys(HKEY_LOCAL_MACHINE, 'SOFTWARE\My_key');
RegDeleteKeyIncludingSubkeys(HKEY_USERS, '.DEFAULT\My_key')
end;

那麼在卸載程序後會去執行這段代碼,去刪除我寫的這兩個key下的所有內容

inno setup的用後感

個人使用下來覺得很容易上手,官網也寫的很清楚,就是全英文的,靠翻譯軟件看起來還挺快的哈哈哈哈哈哈
這是官網鏈接https://jrsoftware.org/isinfo.php
它其實有提供很多個example讓用戶能更快地上手使用並理解他的功能模塊
https://jrsoftware.org/ishelp/
腳本里主要就是分了多個section,速成的話就是可以針對每個section的內容查看(https://jrsoftware.org/ishelp/

擴展
這裏有個動態生成Files的例子:
https://stackoverflow.com/questions/40728147/generating-inno-setup-file-flags-programmatically
可以參考來自動生成components

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章