我正在尝试在Windows 7/8上写入受保护的注册表项:
Section "WriteToRegistry"
# Give all authentificated users (BUILTIN\Users) full access on
# the registry key HKEY_LOCAL_MACHINE\Software\Vendor\SomeApp
AccessControl::GrantOnRegKey \
HKLM "Software\Microsoft\Windows NT\CurrentVersion\Accessibility\ATs\osk" "(BU)" "FullAccess"
WriteRegStr HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Accessibility\ATs\osk" "ATExe" "mystring"
SectionEnd
我也尝试过:
Section "WriteToRegistry"
AccessControl::GetCurrentUserName "" "$0"
Pop $0
MessageBox MB_OK $0 ;mzelensky
AccessControl::SetRegKeyOwner \
HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Accessibility\ATs\osk" "ATExe" $0
AccessControl::GrantOnRegKey \
HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Accessibility\ATs\osk" "ATExe" "FullAccess"
WriteRegStr HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Accessibility\ATs\osk" "ATExe" "mystring"
SectionEnd
它什么也没做。有什么问题?
更新此列表弹出OK消息,但实际上没有执行任何操作:
Section "ProtectedRegistryKey"
AccessControl::GetCurrentUserName
Pop $0
MessageBox MB_OK $0 ;Michael Zelensky
AccessControl::SetRegKeyOwner \
HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Accessibility\ATs\osk" $0
Pop $2
MessageBox MB_OK $2 ;ok
AccessControl::GrantOnRegKey \
HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Accessibility\ATs\osk" \
"$0" "FullAccess"
Pop $3
MessageBox MB_OK $3 ;ok
WriteRegStr \
HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Accessibility\ATs\osk" \
"ATExe1" "osk_1.exe"
Pop $4
MessageBox MB_OK $4 ;empty message
SectionEnd
答案 0 :(得分:1)
您不能在这些参数中包含值名称“ATExe”,注册表权限仅适用于键,而不适用于值。
AccessControl::SetRegKeyOwner HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Accessibility\ATs\osk" $0
AccessControl::GrantOnRegKey HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Accessibility\ATs\osk" $0 "FullAccess"
您还需要从这些调用中弹出返回值...
我还建议您尝试将所有权恢复到合理的位置:
!include LogicLib.nsh
AccessControl::SetRegKeyOwner HKCU "Software\Test" "NT SERVICE\TrustedInstaller"
Pop $0
${If} $0 != "ok"
Pop $0 ; Throw away error details
AccessControl::SetRegKeyOwner HKCU "Software\Test" "(S-1-5-18)" ;NT AUTHORITY\SYSTEM
Pop $0
${IfThen} $0 != "ok" ${|} Pop $0 ${|} ; Throw away error details
${EndIf}