2016-09-14 372 views
1

我的应用程序是使用Java创建的,需要具有管理员权限才能在Windows上运行。使用Inno安装程序我可以用下面的代码改变注册表,它对Windows 7来说工作得很好,但是对于Windows 10和Windows 8,我没有同样的成功,因为注册表显然已经不存在了。在Inno Setup中设置“RUNASADMIN”应用程序兼容性标志

[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