Chrome 的 Inno Setup 自定义 URL

Inno Setup Custom URL for Chrome

我正在使用 Eclipse 和 Inno Setup 创建一个小应用程序。编译是用 Ant 做的。一切正常,我可以找到生成默认 .iss 的位置,将它放在我的 Eclipse 包中,然后可以 mod 让我的安​​装程序注入注册表项,使 Windows 支持我的应用程序自定义 URL.

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

它在 IE 和 Edge 下有效,但不幸的是 Chrome 不适用,因为 Google 决定在自定义 URLs 时不遵循注册表...

你们中有人知道是否可以通过 Inno Setup 安装程序为 Chrome 安装自定义 URL 吗?

目前我知道我们需要 mod %localappdata%/Google/Chrome/User Data/Local State 来添加协议,但是可以通过 Inno Setup 实现吗?

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

Inno Setup 本身不支持 JSON。您可以尝试使用简单的字符串操作手动破解文件。

但我建议您使用一些第 3 方库来解析 JSON,例如 TLama's Inno JSON Config library


代码可以像下面这样。

代码add/sets这个键在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 'JSONQueryBoolean@files:jsonconfig.dll stdcall';
function JSONWriteBoolean(FileName, Section, Key: WideString;
  Value: Boolean): Boolean;
  external 'JSONWriteBoolean@files: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 Setup 的 Unicode 版本。


另见 Inno Setup: Working with JSON


还有一个替代实现,JsonParser