Невозможно изменить запись реестра через Inno Setup Installer - PullRequest
2 голосов
/ 08 октября 2019

Я хочу написать установщик для приложения, предназначенного для 64-разрядной Windows 10. Я определил в Inno Setup Script:

[Setup]
MinVersion=10.0.14393
ArchitecturesAllowed=x64
ArchitecturesInstallIn64BitMode=x64
AlwaysRestart=yes

Также я хочу, чтобы во время установки были включены длинные пути вРеестр Windows. Я добавил следующий код:

[Registry]
Root: HKLM64; Subkey: "System\CurrentcontrolSet\Control\FileSystem"; ValueType: dword; ValueName: "LongPathsEnabled"; ValueData: "1"; Flags: createvalueifdoesntexist; Permissions: users-modify
Root: HKLM64; Subkey: "System\ControlSet001\Control\FileSystem"; ValueType: dword; ValueName: "LongPathsEnabled"; ValueData: "1"; Flags: createvalueifdoesntexist; Permissions: users-modify

Когда я запускаю установщик на моем персональном компьютере и перезагружаюсь, записи в реестре изменяются, но когда мой коллега запускает установщик и перезапускает, записи не изменяются. Само приложение работает на обоих наших компьютерах. У нас обоих есть x64 системы Windows 10 и права администратора. По каким причинам этот скрипт не работает на некоторых компьютерах?

Содержимое файла журнала для компьютера, где записи не изменены :

2019-10-09 09:44:41.296   Key: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\FileSystem
2019-10-09 09:44:41.296   Value name: LongPathsEnabled
2019-10-09 09:44:41.296   Setting permissions on key: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\FileSystem
2019-10-09 09:44:41.296   Starting 64-bit helper process.
2019-10-09 09:44:41.328   Helper process PID: 3248
2019-10-09 09:44:41.343   Creating or opening the key.
2019-10-09 09:44:41.343   Successfully created the key.
2019-10-09 09:44:41.343   -- Registry entry --
2019-10-09 09:44:41.343   Key: HKEY_LOCAL_MACHINE\System\ControlSet001\Control\FileSystem
2019-10-09 09:44:41.343   Value name: LongPathsEnabled
2019-10-09 09:44:41.343   Setting permissions on key: HKEY_LOCAL_MACHINE\System\ControlSet001\Control\FileSystem
2019-10-09 09:44:41.343   Creating or opening the key.
2019-10-09 09:44:41.343   Successfully created the key.

Ответы [ 2 ]

1 голос
/ 10 октября 2019

Просто удалите флаг createvalueifdoesntexist .

Вот что является причиной проблемы, и вы не хотите ее вообще.

0 голосов
/ 09 октября 2019

В конечном итоге, похоже, работает: проверка, есть ли значение в регистре, и если нет, установка значения с флагом createvalueifdoesntexist. В противном случае значение jus изменилось.

[Registry]
Root: HKLM64; Subkey: "System\CurrentControlSet\Control\FileSystem"; ValueType: dword; ValueName: "LongPathsEnabled"; ValueData: "1"; Permissions: users-modify; Flags: createvalueifdoesntexist; Check: LPECurrentControlSetNotInRegistry
Root: HKLM64; Subkey: "System\ControlSet001\Control\FileSystem"; ValueType: dword; ValueName: "LongPathsEnabled"; ValueData: "1"; Permissions: users-modify; Flags: createvalueifdoesntexist; Check: LPEControlSet001NotInRegistry
Root: HKLM64; Subkey: "System\CurrentControlSet\Control\FileSystem"; ValueType: dword; ValueName: "LongPathsEnabled"; ValueData: "1"; Permissions: users-modify; Check: LPECurrentControlSetNotInRegistry
Root: HKLM64; Subkey: "System\ControlSet001\Control\FileSystem"; ValueType: dword; ValueName: "LongPathsEnabled"; ValueData: "1"; Permissions: users-modify; Check: LPEControlSet001NotInRegistry

[Code]
function LPECurrentControlSetNotInRegistry: Boolean;
begin
  if not RegValueExists(HKEY_LOCAL_MACHINE, 'System\CurrentControlSet\Control\FileSystem', 'LongPathsEnabled') then
  begin
    Result := True;
    Exit;
  end;
  Result := False;
end;

function LPEControlSet001NotInRegistry: Boolean;
begin
  if not RegValueExists(HKEY_LOCAL_MACHINE, 'System\ControlSet001\Control\FileSystem', 'LongPathsEnabled') then
  begin
    Result := True;
    Exit;
  end;
  Result := False;
end;
...