Запись в Реестр "RegSetValueEx" только отлаженная рабочая отладка - PullRequest
0 голосов
/ 08 января 2012

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

Я нахожу это очень странным, поэтому обращаюсь к вам, ребята, за помощью.

Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal       hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Private Const BM_CLICK = &HF5
Const REG_DWORD = 4
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Const REGKEY = "Software\Microsoft\Windows\CurrentVersion\Policies\system"
Const KEY_WRITE = &H20006
Dim Path As Long
Dim Value As Long

Sub TASK()
On Error GoTo hell:
Value = 1
If RegOpenKeyEx(HKEY_CURRENT_USER, REGKEY, 0, KEY_WRITE, Path) Then Exit Sub

RegSetValueEx Path, NameOfKey, 0, REG_DWORD, Value, Len(Value)
Exit Sub
hell:
MsgBox Err & Error(Err)
End Sub

Sub UAC()
On Error GoTo hell:
Value = 0
If RegOpenKeyEx(HKEY_LOCAL_MACHINE, REGKEY, 0, KEY_WRITE, Path) Then Exit Sub

RegSetValueEx Path, "ConsentPromptBehaviorAdmin", 0&, REG_DWORD, Value, Len(Value)
Exit Sub
hell:
MsgBox Err & Error(Err)
End Sub

Я уверен, что мне просто не хватает чего-то очень маленького.

1 Ответ

2 голосов
/ 09 января 2012

Это может решить не все ваши проблемы, но важно учитывать следующее:

If RegOpenKeyEx(HKEY_LOCAL_MACHINE, REGKEY, 0, KEY_WRITE, Path) Then Exit Sub 

Вы не можете писать в HKEY_LOCAL_MACHINE, если вы не являетесь администратором.В XP это вызовет ошибку и не удастся, я полагаю.Я считаю, что Vista и Win7 справляются с этим по-разному.Я думаю, что в Vista и Win7 запись виртуализирована в профиле пользователя и не выдает никаких ошибок.Запись хранится не в HKEY_LOCAL_MACHINE, а в виртуальном хранилище.Эти версии Windows также могут виртуализировать доступ к защищенным системным файлам через этот сервис.

http://msdn.microsoft.com/en-us/library/windows/desktop/aa965884(v=vs.85).aspx

также # 6 в этой статье ... http://blogs.msdn.com/b/chinmay_palei/archive/2011/01/16/windows-7-application-compatibility-issues-fix-centre.aspx

Возможно ли, что вы установили VB IDE для работы от имени администратора?Это приведет к тому, что ваш сеанс отладки будет запущен от имени администратора, но когда вы запускаете EXE самостоятельно, он будет работать от имени пользователя?В любом случае, эта строка определенно вызовет ошибки для ваших пользователей.

...