2012-01-08 38 views
0

我試圖修改特定的註冊表項,但它只會在我構建它時調試應用程序時才起作用。寫入註冊表「RegSetValueEx」只能在調試中工作

我覺得這很奇怪,所以我轉向你們尋求幫助。

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 

我相信它只是我很想念的東西。

+0

你在使用什麼操作系統? (這個問題在vista/7中是否升高了用戶?)? – 2012-01-08 04:19:24

+1

我們需要更多信息。你在調試還是編譯時運行在同一臺機器上?相同的用戶帳戶?寫或失敗是失敗的?對RegOpenKeyEx和RegSetValueEx的調用將返回描述錯誤的錯誤代碼。你應該記錄下來,並可能在消息框中顯示它,以便你真正知道失敗的原因和原因。 – shf301 2012-01-08 04:24:06

+0

您不可能將權限寫入名爲'Software \ Microsoft \ Windows \ CurrentVersion \ Policies \ system'的密鑰。 「Microsoft \ Windows」部分是一個不屬於你的應用程序的死角。 – 2012-01-08 04:28:44

回答

2

這可能不是解決你所有的問題,但它是要考慮一些重要的東西:

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以管理員身份運行?這會導致您的調試會話以Admin身份運行,但是當您自行運行EXE時,它將以用戶身份運行?無論哪種方式,這條線肯定會爲您的用戶造成錯誤。