2017-03-26 16 views
-1

私のレジストリの1つのキーの名前を変更するのが難しいです。私は知りませんが、私はいつもプログラムを使って自動的に行うように名前を変えています。コードは以下です:私はよく鍵を開けていないよいくつかの理由についてRegOpenKeyExがエラーを返します。161

int resul = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "\\SOFTWARE\\Company", 0,0,out result); 

using Microsoft.Win32; 
using Microsoft.Win32.SafeHandles; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Runtime.InteropServices; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication7 
{ 
    class Program 
    { 
     private static readonly IntPtr HKEY_LOCAL_MACHINE = new IntPtr(-2147483646); 
     [DllImport("advapi32")] 
     public static extern int RegRenameKey(SafeRegistryHandle hKey, [MarshalAs(UnmanagedType.LPWStr)] string oldname, 
     [MarshalAs(UnmanagedType.LPWStr)] string newname); 
     [DllImport("Advapi32.dll", EntryPoint = "RegOpenKeyExW", CharSet = CharSet.Unicode)] 
     public static extern int RegOpenKeyEx(IntPtr hKey, [In] string lpSubKey, int ulOptions, int samDesired, out IntPtr phkResult); 

     static void Main(string[] args) 
     { //mhmmm si, todo esta bien , bueno ire a ver lo que iba oka ver 
      ///Estas intentando renombrar una clave de registro una la crpeta que la contiene... 
      IntPtr result; 

      SafeRegistryHandle hKey = null;//no es necesario, esta funcuonando, si no, no me hubiere retorando un int 
      hKey = new SafeRegistryHandle(HKEY_LOCAL_MACHINE,true); 
      int resul = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "\\SOFTWARE\\Company", 0,0,out result); 
      Console.WriteLine(resul); 
      int rosul = RegRenameKey(hKey, "SOFTWARE\\Company\\", "SOFTWARE\\Editado\\"); 
      Console.WriteLine(rosul); 
      Console.ReadLine(); //Ok a ver dejamever unos ejemplos de advapi, los tienes ahi? mierdaaa no tiees ideas de los peos que se acaba de tirar mi perro 

     } 

    } 
} 

私はキーを開くときに問題があります。エラーの私を返す:

errors

マイregeditとルールの名前が変更されていない:私は参照のようにかかった

capture of my key

記事:

http://blogs.microsoft.co.il/pavely/2015/09/29/regrenamekey-hidden-registry-api/

を、私は誰かが役に立てば幸い...それは私のコンピュータのためだ。

+0

64ビットOSを使用している場合、スクリーンショットに32ビットではなく64ビットレジストリハイブが表示されていることに注意してください。 .NETは通常アプリケーションのビット数に基づいてアクセスをリダイレクトしますが、この場合はWin32 APIにアクセスしているので、 'KEY_WOW64_32KEY'または' KEY_WOW64_64KEY'フラグを渡す必要があります。 – linuxuser27

答えて

0

エラー87はERROR_BAD_PARAMETERです。これは、関数に渡すパラメータの1つ以上が正しくないことを示します。

エラー161はERROR_BAD_PATHNAMEです。これは、誤ったパスを関数に渡したことを示します。

パスに先行または後続のスラッシュを使用しているために両方のエラーが発生していると思います。したがって、たとえば\\SOFTWARE\\Companyの代わりにSOFTWARE\\Companyがあります。以下の変更を試して、動作するか確認してください。

削除リーディングスラッシュ:

int resul = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Company", 0,0,out result); 

削除末尾スラッシュ:

int rosul = RegRenameKey(hKey, "SOFTWARE\\Company", "SOFTWARE\\Editado"); 

参照

関連する問題