2015-11-01 34 views
1

我正在使用Eclipse和Inno Setup創建一個小應用程序。編譯是使用Ant編寫的。一切工作正常,我可以找到默認的.iss生成的位置,將其放置在我的Eclipse包中,並可以對其進行修改,使我的安裝程序注入註冊表項以使Windows支持我的應用程序自定義URL。Inno Setup適用於Chrome的自定義網址

project/build/package/windows/myapp.iss,加[Registry]部分)

它的工作原理,IE和下緣,可惜沒有爲Chrome的谷歌決定不跟隨註冊表,當涉及到的自定義網址...

不你們誰知道是否可以通過Inno Setup安裝程序安裝Chrome的自定義URL?

我到目前爲止所知道的是,我們需要修改%localappdata%/Google/Chrome/User Data/Local State來添加協議,但是它可以通過Inno Setup來實現嗎?

回答

1

Chrome的Local State配置文件爲JSON格式。

Inno安裝程序本身不支持JSON。您可以嘗試使用簡單的字符串操作手動破解文件。

但我建議您使用一些第三方庫來解析JSON,如TLama's Inno JSON Config library


該代碼可以如下所示。

該代碼在JSON中添加/設置此密鑰。我希望這是,你在做什麼。

"protocol_handler": { 
    "excluded_schemes": { 
    "myprotocol": true 
    } 
} 
[Files] 
Source: "JSONConfig.dll"; Flags: dontcopy 

[code] 
function JSONQueryBoolean(FileName, Section, Key: WideString; 
    Default: Boolean; var Value: Boolean): Boolean; 
    external '[email protected]:jsonconfig.dll stdcall'; 
function JSONWriteBoolean(FileName, Section, Key: WideString; 
    Value: Boolean): Boolean; 
    external '[email protected]:jsonconfig.dll stdcall'; 

procedure EnableChromeProtocol(Protocol: string); 
var 
    FileName: WideString; 
    BoolValue: Boolean; 
begin 
    FileName := ExpandConstant('{localappdata}') + '\Google\Chrome\User Data\Local State'; 
    Log('Chrome local state config file: ' + FileName); 

    if JSONQueryBoolean(
     FileName, 'protocol_handler.excluded_schemes', Protocol, False, BoolValue) then 
    begin 
    if BoolValue then 
    begin 
     Log('Protocol is enabled'); 
    end 
     else 
    begin 
     Log('Protocol is disabled'); 
    end; 
    end 
    else 
    begin 
    Log('Protocol not configured'); 
    BoolValue := False; 
    end; 

    if not BoolValue then 
    begin 
    if JSONWriteBoolean(FileName, 'protocol_handler.excluded_schemes', Protocol, True) then 
    begin 
     Log('Protocol enabled'); 
    end 
     else 
    begin 
     Log('Protocol enabling failed'); 
    end; 
    end; 
end; 

procedure CurStepChanged(CurStep: TSetupStep); 
begin 
    if CurStep = ssInstall then 
    begin 
    EnableChromeProtocol('myprotocol'); 
    end; 
end; 

的代碼需要創新安裝的Unicode版本。


另請參閱Inno Setup: Working with JSON


還有一個替代實施,JsonParser

+1

哇,這正是我所追求的,即使我現在無法測試,我已經可以說這是我需要的東西...今晚我會回家檢查,我會回來如果需要。多謝! – Psychokiller1888

+0

好的,整件事情都很有效,只需要確保Chrome已關閉以及新的後臺服務,否則將覆蓋此安裝過程。不是,爲了啓用協議,它應該被設置爲「false」。但由於某些原因,它仍然無法使用我的網址,但這是另一個問題。感謝您的幫助和腳本! – Psychokiller1888