2016-07-12 10 views
0

レジストリに値を挿入するためのテストプログラムが動作しません。 Googleまたはこのウェブサイトで解決策を見つけられませんでした。プログラムを管理者として実行すると、即座に終了し、レジスタは変更されません。C++がレジストリに値を挿入していません

HKEY hkey; 
const char PATH[] = "C:\\Program Files\\Windows NT\\Accessories\\wordpad.exe"; 

RegOpenKeyEx(HKEY_LOCAL_MACHINE, 
    "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 
    0, 
    KEY_WRITE, 
    &hkey); 

RegSetValueEx(hkey, 
    "TestWordPad", 
    0, 
    REG_SZ, 
    (BYTE*)PATH, 
    strlen(PATH)); 

RegCloseKey(hkey); 

return 0; 

私はデバッグを開始した後は、出力がこれです:

'ConsoleApplication1.exe'(Win32の):ロード 「C:\ Users \ユーザーヤクブ\デスクトップ\ ConsoleApplication1 \デバッグ\ ConsoleApplication1.exe ' シンボルがロードされました。 'ConsoleApplication1.exe'(Win32):ロードされた 'C:\ Windows \ SysWOW64 \ ntdll.dll'。 PDBファイルを見つけたり開くことができません。 'ConsoleApplication1.exe'(Win32): 'C:\ Windows \ SysWOW64 \ kernel32.dll'をロードしました。 PDBファイルを見つけたり開くことができません。 'ConsoleApplication1.exe'(Win32): 'C:\ Windows \ SysWOW64 \ KernelBase.dll'が読み込まれました。 PDB ファイルを見つけたり開くことができません。 'ConsoleApplication1.exe'(Win32): 'C:\ Windows \ SysWOW64 \ advapi32.dll'をロードしました。 PDBファイルを見つけたり開くことができません。 'ConsoleApplication1.exe'(Win32): 'C:\ Windows \ SysWOW64 \ msvcrt.dll'が読み込まれました。 PDBファイルを見つけたり開くことができません。 'ConsoleApplication1.exe'(Win32): 'C:\ Windows \ SysWOW64 \ sechost.dll'が読み込まれました。 PDBファイルを見つけたり開くことができません。 'ConsoleApplication1.exe'(Win32): 'C:\ Windows \ SysWOW64 \ rpcrt4.dll'が読み込まれました。 PDBファイルを見つけたり開くことができません。 'ConsoleApplication1.exe'(Win32): 'C:\ Windows \ SysWOW64 \ sspicli.dll'が読み込まれました。 PDBファイルを見つけたり開くことができません。 'ConsoleApplication1.exe'(Win32): 'C:\ Windows \ SysWOW64 \ cryptbase.dll'が読み込まれました。 PDBファイルを見つけたり開くことができません。 'ConsoleApplication1.exe'(Win32): 'C:\ Windows \ SysWOW64 \ vcruntime140d.dll'が読み込まれました。 PDB ファイルを見つけたり開くことができません。 'ConsoleApplication1.exe'(Win32): 'C:\ Windows \ SysWOW64 \ ucrtbased.dll'が読み込まれました。 PDBファイルを見つけたり開くことができません。 'ConsoleApplication1.exe'(Win32): 'C:¥Windows¥SysWOW64¥api-ms-win-core-timezone-l1-1-0.dll'が読み込まれました。 が見つからないか、PDBファイルが開けません。 'ConsoleApplication1.exe'(Win32): 'C:¥Windows¥SysWOW64¥api-ms-win-core-file-l2-1-0.dll'が読み込まれました。または PDBファイルを開くことができません。 'ConsoleApplication1.exe'(Win32): 'C:¥Windows¥SysWOW64¥api-ms-win-core-localization-l1-2-0.dll'が読み込まれました。 PDBファイルを検索または開くことができません。 'ConsoleApplication1.exe'(Win32): 'C:¥Windows¥SysWOW64¥api-ms-win-core-synch-l1-2-0.dll'が読み込まれました。または PDBファイルを開くことができません。 'ConsoleApplication1.exe'(Win32): 'C:¥Windows¥SysWOW64¥api-ms-win-core-processthreads-l1-1-1.dll'が読み込まれました。 PDBファイルを見つけたり開くことができません。 'ConsoleApplication1.exe'(Win32): 'C:¥Windows¥SysWOW64¥api-ms-win-core-file-l1-2-0.dll'がロードされました。 PDBファイルを検索または開くことができません。プログラム '[3052] ConsoleApplication1.exe'がコード0(0x0)で終了しました。

+1

https://msdn.microsoft.com/en-us/library/windows/desktop/ms724897(v=vs.85).aspx https://msdn.microsoft.com/en-us/library/windows /desktop/ms724923(v=vs.85).aspx戻り値を確認します。 – ABuckau

+1

あなたが見ているエラーは、すべて「PDBファイルを見つけることができないか開いていません」です。これは、デバッグのためにシンボルなしでライブラリを使用していることを意味しますが、結果には影響しません。 –

+0

管理者プログラムとして実行するとアクセスが拒否される通常の書き込みを実行する – Marek

答えて

1

このコードは一貫して動作しません2つの理由があります:

  1. をWindows Vistaで実行したり、後でそれがHKLMに書き込むために(例えば、UACを上昇)管理者権限を必要とする場合は。

    :あなたは、このコードは32ビットアプリとしてコンパイルされますが、64ビットシステム上で実行されている場合は、それが実際に次のキーを変更する管理者のコマンドプロンプトを起動するか、管理者

  2. としてのVisual Studioを実行することによって、これを試すことができますあなたのアカウントにこれらの2ポイントを取る場合

    HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run 
    

コード作業を行います。各機能からの戻りコードを確認することをお勧めします。例えば:あなたが管理者権限なしでコードを実行した場合

LONG lResult=RegOpenKeyEx(HKEY_LOCAL_MACHINE, 
    "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 
    0, 
    KEY_WRITE, 
    &hkey); 

あなたは、これは5(ERROR_ACCESS_DENIED)を返し見つかります。

+0

これは理由2でした。私は32ビットアプリケーションを作成し、64ビットウィンドウで実行します。助けてくれてありがとう – Marek

+0

問題ありません。質問に答えてください。ありがとうございました。 – jimc

関連する問題