0

リモートレジストリを読み取るためだけに、私が本当に知らない管理クラスを使用しています:

        string regKeyToGet = @"SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources";
        string keyToRead = "Description";
        ConnectionOptions oConn = new ConnectionOptions();
        oConn.Username = "user1";
        oConn.Password = "user1password";

        ManagementScope scope = new ManagementScope(@"//" + "PC1" + @"/root/default", oConn);
        ManagementClass registry = new ManagementClass(scope, new ManagementPath("StdRegProv"), null);

        ManagementBaseObject inParams = registry.GetMethodParameters("GetStringValue");
        inParams["sSubKeyName"] = regKeyToGet;
        inParams["sValueName"] = keyToRead;
        ManagementBaseObject outParams = registry.InvokeMethod("GetStringValue", inParams, null);
        MessageBox.Show(outParams["sValue"].ToString());

このコードは、指定されたキーの特定の値を返しますが、次のように名前の値の配列を返す必要があります。

RegistryKey regKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.CurrentUser, PC1, RegistryView.Registry64).OpenSubKey("SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources");
regKey.GetValueNames();
4

1 に答える 1

0

いくつかの調査の後、私はそれを行う方法を見つけました、ここにコードがあります:

        ConnectionOptions oConn = new ConnectionOptions();
        oConn.Username = "user1";
        oConn.Password = "user1password";
        ManagementScope scope = new ManagementScope(@"//" + "PC1" + @"/root/default", oConn);
        scope.Connect();

        ManagementClass mc = new ManagementClass("stdRegProv");
        mc.Scope = scope;

        ManagementBaseObject mbo;
        mbo = mc.GetMethodParameters("EnumValues");

        mbo.SetPropertyValue("sSubKeyName", @"SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources");

        string[] subkeys = (string[])mc.InvokeMethod("EnumValues", mbo, null).Properties["sNames"].Value;

        foreach (string strKey in subkeys)
        {
            MessageBox.Show(strKey);
        } 

私はページで助けを見つけました:リモートレジストリキーを読む方法?

于 2012-06-20T13:41:07.670 に答える