2012-01-08 10 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では、問題は不安定になっていますか?) –

+1

さらに詳しい情報が必要です。あなたはデバッグ時とコンパイル時に同じマシンで実行していますか?同じユーザーアカウントですか?どの書き込みまたはオープンが失敗したかは失敗していますか? 'RegOpenKeyEx'と' RegSetValueEx'の呼び出しは、失敗した場合にエラーを記述するエラーコードを返します。それを記録し、メッセージボックスに表示して、何が失敗しているのか、そしてなぜそれが本当にわかるようにする必要があります。 – shf301

+0

'Software \ Microsoft \ Windows \ CurrentVersion \ Policies \ system'という名前の鍵への書き込み権限を持つことはほとんどありません。 'Microsoft \ Windows'の部分は、あなたのアプリに属していない致命的なものです。 –

答えて

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が設定されていることは可能ですか?これはあなたのデバッグセッションが管理者として実行される原因になりますが、EXEを実行しているときにはユーザーとして実行されますか?いずれにせよ、この行は間違いなくあなたのユーザーにエラーを引き起こすでしょう。

関連する問題