2015-11-01 1 views
1

Я использую Eclipse и Inno Setup для создания небольшого приложения. Компиляция производится с помощью Ant. Все работает отлично, я могу найти, где генерируется default .iss, поместить его в мой пакет Eclipse и смогу его модифицировать, чтобы мой установщик ввел ключи реестра, чтобы заставить Windows поддерживать собственный URL приложения.Установочный URL-адрес Inno для Chrome

(project/build/package/windows/myapp.iss, добавлена ​​[Registry] часть)

Он работает под IE и Edge, но, к сожалению, не для Chrome, как Google решил не следовать реестра, когда речь заходит о пользовательских URL-адресов ...

ли кто-нибудь из вас знает, можно ли установить собственный URL-адрес для Chrome через установщик Inno Setup?

Что я знаю, так это то, что нам нужно смоделировать %localappdata%/Google/Chrome/User Data/Local State, чтобы добавить протокол, но возможно ли это через Inno Setup?

ответ

1

Файл конфигурации Local State находится в формате JSON.

Inno Setup не поддерживает 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; 

код требует версии Юникода установки Inno.


См. Также Inno Setup: Working with JSON.


Существует также альтернативная реализация, JsonParser.

+1

Вау, это именно то, что я был после, и хотя я не могу проверить прямо сейчас, я уже могу сказать, что это то, что мне нужно ... проверит сегодня вечером, когда я вернусь домой, и я вернусь, если необходимо. Спасибо вам много раз! – Psychokiller1888

+0

Итак, все, что нужно, просто убедитесь, что Chrome закрыт, а также их новая служба фонового режима, или что будет перезаписана эта процедура установки. Нет, для включения протокола необходимо установить значение «false». Но по некоторым причинам он все равно не будет работать с моим URL-адресом, но это другой вопрос. Спасибо за вашу помощь и скрипт! – Psychokiller1888