基于架构的条件注册表更改

Conditional registry change based on architecture

我需要你宝贵的 Inno Setup 帮助(请耐心等待,因为我不是程序员)。

我被要求提供一个脚本,该脚本在安装 myprogram.exe 后执行(仅在 Windows 10 中)某些注册表更改。

在不同于 Windows 10 的所有其他操作系统中,安装程序仅运行 myprogram.exe 并且不执行任何检查。

在 Windows 10 安装 myprogram.exe 之后,我应该(在 x64 版本中)更改两个注册表项。

安装“myprogram.exe”后我应该更改的注册表项是:

在 64 位版本中:

在 32 位版本中:

通过添加一个名为 myprogram.exe 的双字(在上述键中),其十六进制值为 BF

我尝试在每个 RegWriteDwordValue 语句的末尾添加 [Code] 部分和 MinVersion:

我不知道如何区分要修改的密钥与 32 位和 64 位版本以及如何创建具有十六进制值的双字 BF

到目前为止这是我的清单:

[Files]
Source: "C:\Meleena\myprogram.exe"; DestDir: "{tmp}"; Flags: ignoreversion

[Run]
Filename: "C:\Meleena\myprogram.exe";

[Code]

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if IsWin64 and if CurStep = sspostInstall then begin
    RegWritedwordValue(HKEY_LOCAL_MACHINE, 'Software\Microsoft\Internet Explorer\Main\Feature Control\ FEATURE_DOCUMENT_COMPATIBLE_MODE\',
      'Myprogram.exe', BF); Minversion:10.0.10240
    RegWritedwordValue(HKEY_LOCAL_MACHINE, 'Software\Wow6432Node\Microsoft\Internet Explorer\Main\Feature Control\ FEATURE_DOCUMENT_COMPATIBLE_MODE\',
      'Myprogram.exe', BF); Minversion:10.0.10240
  end;
  if IsnotWin64 and if CurStep = sspostInstall then begin
    RegWritedwordValue(HKEY_LOCAL_MACHINE, 'Software\Microsoft\Internet Explorer\Main\Feature Control\ FEATURE_DOCUMENT_COMPATIBLE_MODE\',
      'Myprogram.exe', BF); Minversion:10.0.10240
  end;  
end;

你能帮帮我吗?

您不需要为此使用 Pascal 脚本。 Inno Setup 本身就允许这样做。您只需要在 64-bit mode.

中允许设置 运行
[Setup]
; Allow 64-bit mode
ArchitecturesInstallIn64BitMode=x64

[Registry]
; Both 32-bit and 64-bit
Root: HKLM; \
    Subkey: "Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_DOCUMENT_COMPATIBLE_MODE"; \
    ValueType: dword; ValueName: "myprogram.exe"; ValueData: BF; MinVersion:10.0.10240

; On 64-bit systems, install also to Software\Wow6432Node\Microsoft\...
; Note the HKLM32
Root: HKLM32; \
    Subkey: "Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_DOCUMENT_COMPATIBLE_MODE"; \
    ValueType: dword; ValueName: "myprogram.exe"; ValueData: BF; MinVersion:10.0.10240; \
    Check: IsWin64 

注意是 FeatureControl,不是 Feature Control