2016-09-14 435 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