我試圖使用{REG}常數DefaultDirName它引用包含大括號的路徑包含括號註冊表項:Inno Setup的參考使用{REG}不斷
DefaultDirName={reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{3E4A76D9-EC0E-4806-915C-8BC2B3C0011B},InstallLocation}
然而,這並不因爲編譯器認爲路徑中的GUID是一個常量。如果我嘗試使用另一個大括號(如下所示)將大括號轉義出來,這也不起作用,並給出'無效的註冊表常量'錯誤。
DefaultDirName={reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{3E4A76D9-EC0E-4806-915C-8BC2B3C0011B},InstallLocation}
我已經嘗試了所有組合我能想到的,試圖逃避這一點,並讓編譯器認識到這一點,包括使用%7D,試圖迫使一個右括號,如文檔中建議爲好,但在這種情況下,這看起來似乎並沒有被編譯成右大括號。希望有人可以建議如何讓編譯器識別這個註冊表位置,或者至少告訴我我是否試圖做一些不可能的事情。如果是這樣,是否有另一種方法來嘗試呢?鑑於我也已經嘗試過:
DefaultDirName={code:GetExistingInstallPath}
[Code]
function GetExistingInstallPath(Param: String): String;
begin
RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{F34A6950-7E0E-4F92-8B0E-C552F4989DA}',
'InstallLocation', strExistingInstallPath);
Result := strExistingInstallPath;
end;
這確實編譯,但strExistingInstallPath返回任何內容並懸停在{代碼:GetExistingInstallPath}返回「異常:無法計算‘代碼’不變的,因爲可能的副作用。 「經過幾個小時試圖讓這個工作,我接近得出結論,Inno Setup不支持包含大括號的註冊表位置。
請注意,我需要閱讀此註冊表項,因爲該軟件未由Inno Setup安裝,並且這是一個替換文件的補丁程序,所以我需要知道它最初安裝的位置。
我已經試過了,但我期待的結果是在運行調試器時顯示%7d替代爲大括號。當我用這種語法運行它時它確實編譯了,但沒有顯示任何結果。現在已經檢查了第50次所有內容,感謝您的建議,我剛剛注意到GUID中有一個不正確的字符(轉置錯誤),事後看來,顯然是我沒有得到任何結果的原因!在這種情況下,我顯然無法看到樹木上的木材,只關注語法!非常感謝! – 2014-12-01 20:58:38
@Robert,你將不會看到這些字符在調試器中未被轉義,因爲它們是[內部擴展](https://github.com/jrsoftware/issrc/blob/is-5_5_5/Projects/Main.pas #L782)。 – TLama 2014-12-01 21:17:19