2016-09-14 2 views
1

Мое приложение было создано с Java, и для его работы в Windows требуется привилегия администратора. Используя Inno Setup, я могу изменить изменение реестра с помощью следующего кода, и он отлично подходит для Windows 7, однако для Windows 10 и 8 у меня нет такого же успеха, поскольку реестра, по-видимому, больше не существует.Установите флаг совместимости приложений «RUNASADMIN» в Inno Setup

[Registry] 
Root: HKCR; Subkey: "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\"; ValueType: String; ValueName: "{app}\AppExecutable.exe"; ValueData: "RUNASADMIN"; Flags: uninsdeletekeyifempty uninsdeletevalue; 
Root: HKLM; Subkey: "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\"; ValueType: String; ValueName: "{app}\AppExecutable.exe"; ValueData: "RUNASADMIN"; Flags: uninsdeletekeyifempty uninsdeletevalue; 

Я прочитал это может быть сделано с исполняемым манифестом, но я предполагаю, что это только для приложений, сделанных в Visual Studio, который не мой сценарий. Есть ли способ выразить это в манифесте Java?

Я хотел бы знать, могу ли я сделать это другим способом, если есть другой реестр, который я могу изменить или мне нужно прикрепить и запустить другой тип скрипта во время установки.

ответ

2

Я не думаю, что ваша проблема связана с Windows 7 и Windows 8/10. Скорее всего, ваш Windows 7 32-разрядный, а Windows 8/10 - 64-разрядный.

Инсталлятор Inno Setup - это 32-разрядное приложение, поэтому SOFTWARE по умолчанию перенаправляется на SOFTWARE\Wow6432Node.

Для явного исключения перенаправления необходимо использовать явный 64-битный корень реестра, например Root: HKLM64.

Возможно, вы также захотите добавить Check: IsWin64, чтобы убедиться, что запись не обрабатывается при 32-разрядной установке, так как это вызовет ошибку.

См. [Registry] section documentation.

или use 64-bit install mode.


Я также считаю, что это не должно быть HKCR, но HKCU.


[Registry] 
; keys for 32-bit systems 
Root: HKCU32; Subkey: "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"; \ 
    ValueType: String; ValueName: "{app}\AppExecutable.exe"; ValueData: "RUNASADMIN"; \ 
    Flags: uninsdeletekeyifempty uninsdeletevalue; Check: not IsWin64 
Root: HKLM32; Subkey: "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"; \ 
    ValueType: String; ValueName: "{app}\AppExecutable.exe"; ValueData: "RUNASADMIN"; \ 
    Flags: uninsdeletekeyifempty uninsdeletevalue; Check: not IsWin64 

; keys for 64-bit systems 
Root: HKCU64; Subkey: "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"; \ 
    ValueType: String; ValueName: "{app}\AppExecutable.exe"; ValueData: "RUNASADMIN"; \ 
    Flags: uninsdeletekeyifempty uninsdeletevalue; Check: IsWin64 
Root: HKLM64; Subkey: "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"; \ 
    ValueType: String; ValueName: "{app}\AppExecutable.exe"; ValueData: "RUNASADMIN"; \ 
    Flags: uninsdeletekeyifempty uninsdeletevalue; Check: IsWin64 
Смежные вопросы