我想用Inno Setup創建一個安裝程序,這是我第一次使用此工具。
我想要做的是用更詳細的自制安裝程序(即Setup.exe中的Setup.exe)封裝現有軟件的現有安裝程序。在Inno Setup安裝結束時編寫32/64位特定註冊表鍵
在研究到目前爲止,我的作品是要求安裝程序(Inno Setup * .exe)運行附帶的安裝程序(實際的軟件設置)。
爲什麼我需要另一個安裝程序?因爲我想給它一些額外的功能。
特別是:我想在安裝結束時添加一個註冊表鍵,作爲適合相關位系統(32/64位)的最後一步。這裏是我要求專家幫助的地方。 (主要關注)
我的詳細問題如下:
- 我設法使用創新安裝的
[Registry]
部分增加的關鍵。然而,[Registry]
似乎總是在[Run]
之前運行 - 但我需要在安裝後添加的密鑰(添加到安裝本身創建的註冊表路徑中),而不是之前,所以我刪除了[Registry]
之前已經工作的(只是順序錯誤) 。爲了在主安裝後完成reg-add,我找到了兩個程序AfterInstall
和CurStepChanged
/ssPostInstall
和DeinitializeSetup
,這似乎不適合我的關注(但想到AfterInstall
將是我正在尋找的? ),因爲沒有更多的應該來之後,我認爲它不會運行,如果安裝之前已經失敗(?!) - 我不知道用於添加註冊表鍵(字符串)的Pascal語法,我可以在
[Registry]
之下添加它,但是當涉及到[Code]
部分時,即使我現在對Inno Setup給出了許多功能等方面的研究,我也感覺有點遺憾。 - 第三個問題是,註冊表中的路徑會有所不同,具體取決於它是32位還是64位位系統。所以實際上在添加一個或另一個路徑/關鍵字之前(這是因爲程序本身的安裝根據位版本創建了路徑)之前實際上需要額外的查詢來檢查位系統,所以我發現函數
IsWin64
(布爾值) ,現在試圖將一個函數(位版本查詢)與一個過程(AfterInstall
)混合起來,即使對我而言,初學者也是錯誤的。另外我試着創建一個if-else-query,編譯器告訴我我做錯了。if IsWin64 then...
的作品,但添加一個沒有。
所以理論上解決將大致是這樣的......
procedure MyAfterInstall();
function IsWin64: Boolean;
if 64-bit Reg-Add HKLM\SOFTWARE\Wow6432Node\A
else Reg-Add HKLM\SOFTWARE\B
對不起,我沒有給你提供更多。我通常不會編碼。
如果相關,這就是我在我的代碼段至今:
[Code]
procedure DeinitializeSetup();
begin
RegWriteStringValue(
HKEY_LOCAL_MACHINE, 'SOFTWARE\Wow6432Node\A', 'ConnectionString ', 'Data Source=Test;');
end;
我之所以用DeinitializeSetup
是因爲它是一兩件事,爲我工作,到目前爲止,但是我知道這個功能是即使用戶在安裝任何東西之前退出設置,這也不是很好。我在安裝後運行它,因爲軟件安裝本身創建了我想要添加密鑰的路徑,在軟件安裝失敗時擁有密鑰是沒有意義的......也許還有更好的方法。
很多道歉,並提前感謝任何幫助。
是不是真的'HKLM \ SOFTWARE \ Wow6432Node \ A' VS'REG-添加HKLM \ SOFTWARE \ B'或者說'註冊 - 添加HKLM \ SOFTWARE \ A'?即是唯一的區別'Wow6432Node'還是實際的關鍵路徑結尾也不同? –
@MartinPrikryl你說得對,「Wow6432Node」是唯一的區別。其餘的都是一樣的,即使我想添加的數據記錄對於32位和64位版本都是一樣的。 – Yauhun