Inno Setup 登錄檔啟動項 修改登錄檔

2021-09-01 03:47:20 字數 3872 閱讀 6294

//登錄檔啟動項

[registry]

這個可選段用來定義一些你想用安裝程式在使用者系統中建立、修改或刪除的登錄檔鍵/值。

按預設,用安裝程式建立的登錄檔鍵和值在解除安裝時不刪除。如果你想讓解除安裝程式刪除鍵或值,你必須包含下面 uninsdelete* 標記中的乙個。

下面是 [registry] 段的乙個示例:

下列是所支援的引數列表:

root (必需的)

根鍵。必須是下列值中的乙個:

hkcr (hkey_classes_root)

hkcu (hkey_current_user)

hklm (hkey_local_machine)

hku (hkey_users)

hkcc (hkey_current_config)

該值可以帶有 32 或 64 的字尾。帶 32 字尾的根鍵值 (例如 hklm32) 對映到 32 位系統登錄檔,帶 64 字尾的根鍵值 (例如 hklm64) 對映到 64 位系統登錄檔。

帶 64 字尾的根鍵值只能在安裝程式在 64 位 windows 執行時使用,否則將會出錯。在支援 32 和 64 位結構的安裝程式中,這可以通過新增 check: iswin64 引數檢查來避免,這會在執行於 32 位 windows 時該條目自動跳過。

不帶字尾的根鍵值 (例如 hklm) 等於帶字尾 32 的值 (例如 hklm32),除非安裝程式執行於 64 位模式,在這種情況下,該值等於帶字尾 64 的值 (例如 hklm64)。

示例:root: hkcusubkey (必需的)

子鍵名,可以包含常量。

示例:subkey: "software\my company\my program"valuetype

值的資料型別。必須是下面中的乙個:

none

string

expandsz

multisz

dword

qword

binary

如果指定了 none (預設設定),安裝程式將建立乙個沒有鍵值的鍵,在這種情況下,valuename 和 valuedata 引數將被忽略。

如果指定了 string,安裝程式將建立乙個字串 (reg_sz) 值。

如果指定了 expandsz,安裝程式將建立乙個擴充套件字串 (reg_expand_sz) 值。

如果指定了 multisz,安裝程式將建立乙個多行文字 (reg_multi_sz) 值。

如果指定了 dword,安裝程式將建立乙個32位整數 (reg_dword) 值。

如果指定了 qdword,安裝程式將建立乙個64位整數 (reg_qdword) 值。

如果指定了 binary,安裝程式將建立乙個二進位制 (reg_binary) 值。

示例:valuetype: stringvaluename

要建立的值名,可以包含常量。如果是空白的,將寫入到「預設」值。如果 valuetype 引數設定為 none,這個引數被忽略。

示例:valuename: "version"valuedata

值的資料。如果 valuetype 引數是 string,expandsz 或 multisz,這是這乙個可以包含常量的字串。如果資料型別是 dword或qdword,這可以是乙個十進位制整數 (例如「123」),乙個十六進製制整數 (例如「$7b」) 或解析為整數的常量。如果資料型別是 binary,這可以是下列形式的十六進製制位元組序列: 「00 ff 12 34」。如果資料型別是 none,將被忽略。

在 multisz 型別值中,你可以在引數中使用乙個特殊常量呼叫 以插入換行符。

示例:valuedata: "1.0"permissions

這個引數在使用者必須執行 windows 2000 或更高版本 (nt 4.0 由於 api 的問題不支援) 以及當前使用者必須有更改登錄檔的許可權時才有效。這些條件不滿足時,不會顯示錯誤訊息,許可權也不會被設定。

這個引數應該只使用於你的應用程式特有的登錄檔鍵中。不要更改頂級鍵象 hkey_local_machine\software 的 acl,否則你自己開啟了使用者系統的安全漏洞。

指定的許可權不考慮登錄檔鍵在安裝前是否存在。如果 valuetype 是 none 和使用了 deletekey 或 deletevalue 標記時,不要設定這個許可權。

這個引數可以包含象下列格式一樣乙個或多個空格分隔的值:

《使用者或組標識》-《訪問型別》

下面是 [registry] 段支援的訪問型別:

full

同意「完全控制」許可,與 modify 相同 (看下面),但又加上允許指定的使用者/使用者組獲取登錄檔鍵所有權,並改變它的許可。通常保守的使用 modify 就足夠了。

modify

同意「修改」許可,允許指定的使用者/使用者組讀取、修改和刪除登錄檔值或子鍵。

read

同意「讀取和執行」許可,允許指定的使用者/使用者組讀取登錄檔值或子鍵。

示例:permissions: users-modifyflags

這個引數是額外選項設定。多個選項可以使用空格隔開。支援下面的選項:

createvalueifdoesntexist

當指定了這個標記,安裝程式只在如果沒有相同名字的值存在時建立值。如果值型別是 none,或如果你指定了 deletevalue 標記,這個標記無效。

deletekey

當指定了這個標記,安裝程式在如果條目存在的情況下,先將嘗試刪除它,包括其中的所有值和子鍵。如果 valuetype 不是 none,那麼它將建立乙個新的鍵和值。

要防止意外,如果 subkey 是空白的或只包含反斜框符號,安裝時這個標記被忽略。

deletevalue

當指定了這個標記,安裝程式在如果值存在的情況下,先將嘗試刪除值,如果 valuetype 是 none,那麼在鍵不存在的情況下,它將建立鍵以及新值。

dontcreatekey

當指定了這個標記,如果鍵已經在使用者系統中不存在,安裝程式將不嘗試建立鍵或值。如果鍵不存在,不顯示錯誤訊息。

一般來說,這個鍵與 uninsdeletekey 標記組合使用,在解除安裝時刪除鍵,但安裝時不建立鍵。

noerror

如果安裝程式因任何原因建立鍵或值失敗,不顯示錯誤訊息。

preservestringtype

這只在當 valuetype 引數是 string 或 expandsz 時適用。當指定這個標記,並且值不存在或現有的值不是 string 型別 (reg_sz 或 reg_expand_sz),它將用 valuetype 指定的型別建立。如果值存在,並且是 string 型別,它將用先存在值的相同值型別替換。

uninsclearvalue

當解除安裝程式時,設定值資料為空字元 (型別 reg_sz)。這個標記不能與 uninsdeletekey 標記組合使用。

uninsdeletekey

當解除安裝程式時,刪除整個鍵,包含其中的所有值和子鍵。這對於 windows 自身使用的鍵明顯不是乙個好方法。你只能用於你的應用程式特有的鍵中。

為防止意外,安裝期間如果 subkey 空白或只包含反斜框符號,這個標記被忽略。

uninsdeletekeyifempty

當程式解除安裝時,如果這個鍵的內部沒有值或子鍵,則刪除這個鍵。這個標記可以與 uninsdeletevalue 組合使用

為防止意外,安裝期間如果 subkey 空白或只包含反斜框符號,這個標記被忽略。

uninsdeletevalue

當程式解除安裝時刪除該值。這個標記不能與 uninsdeletekeyifempty 組合使用

注意: 在早於 1.1 的 inno setup 版本中,你可以使用這個標記連同資料型別 none,那麼它的功能與「如果空則刪除鍵」標記一樣。這個方法已經不支援了。你必須使用 uninsdeletekeyifempty 標記實現。

示例:flags: uninsdeletevalue

登錄檔開機啟動項

登錄檔常用開機啟動項位置 hkey current user software microsoft windows currentversion run 計算機使用者設定的啟動項 hkey local machine software microsoft windows currentversion...

登錄檔中的啟動項

load鍵,隱藏得很深,位於 hkcu software microsoft windows nt currentversion windows load userinit鍵,位於 hklm software microsoft windows nt currentversion winlogon ...

通過登錄檔修改啟動項

開始 執行 regedit 啟動項的位置在 hkey local machine software microsoft windows currentversion run hkey local machine software microsoft windows currentversion ru...