次の方法で共有


RegistryKey.OpenRemoteBaseKey メソッド

外部のコンピュータ上にある要求されたキーを表す新しい RegistryKey を開きます。

Public Shared Function OpenRemoteBaseKey( _
   ByVal hKey As RegistryHive, _   ByVal machineName As String _) As RegistryKey
[C#]
public static RegistryKey OpenRemoteBaseKey(RegistryHivehKey,stringmachineName);
[C++]
public: static RegistryKey* OpenRemoteBaseKey(RegistryHivehKey,String* machineName);
[JScript]
public static function OpenRemoteBaseKey(
   hKey : RegistryHive,machineName : String) : RegistryKey;

パラメータ

  • hKey
    開く HKEY。Win32.RegistryHive クラスにより提供されます。
  • machineName
    接続先コンピュータ。

戻り値

要求された RegistryKey

例外

例外の種類 条件
ArgumentException hKey が無効であるか、machineName が見つかりません。
ArgumentNullException コンピュータ名が null です。
SecurityException ユーザーに、この操作を実行するための十分なアクセス許可がありません。

解説

コンピュータ名として String.Empty が渡される場合は、ローカル コンピュータのレジストリが開いています。要求したキーは外部コンピュータのベース ルート キーである必要があります。このキーは、適切な RegistryHive 値により識別されます。

キーをリモート操作で開くには、サービスとクライアントの両方のコンピュータでリモート キー サービスを実行しており、リモート管理機能が有効である必要があります。

使用例

[Visual Basic, C#, C++] リモート コンピュータでレジストリ キーを開き、そのキーの値を列挙する方法を次のコード例に示します。リモート コンピュータは、リモート レジストリ サービスを実行している必要があります。プログラムを呼び出すときにリモート コンピュータ名をコマンドライン引数として指定します。

 
Imports Microsoft.VisualBasic
Imports System
Imports System.IO
Imports System.Security.Permissions
Imports Microsoft.Win32

<Assembly: RegistryPermissionAttribute( _
    SecurityAction.RequestMinimum, _
    Read := "HKEY_CURRENT_USER\Environment")>
<Assembly: SecurityPermissionAttribute( _
    SecurityAction.RequestMinimum, UnmanagedCode := True)>

Public Class RemoteKey

    Shared Sub Main(commandLineArgs As String())
    
        Dim environmentKey As RegistryKey

        ' Check that an argument was specified when the 
        ' program was invoked.
        If commandLineArgs.Length = 0 Then
            Console.WriteLine("Error: The name of the remote " & _
                "computer must be specified as input on the " & _
                "command line.")
            Return
        End If

        Try
            ' Open HKEY_CURRENT_USER\Environment on a remote computer.
            environmentKey = RegistryKey.OpenRemoteBaseKey( _
                RegistryHive.CurrentUser, _
                commandLineArgs(0)).OpenSubKey("Environment")
        Catch ex As IOException
            Console.WriteLine("{0}: {1}", _
                ex.GetType().Name, ex.Message)
            Return
        End Try

        ' Print the values.
        Console.WriteLine("\nThere are {0} values For {1}.", _
            environmentKey.ValueCount.ToString(), environmentKey.Name)

        For Each valueName As String In environmentKey.GetValueNames()
            Console.WriteLine("{0,-20}: {1}", valueName, _
                environmentKey.GetValue(valueName).ToString())
        Next

        ' Close the registry key.
        environmentKey.Close()
    
    End Sub
End Class

[C#] 
using System;
using System.IO;
using System.Security.Permissions;
using Microsoft.Win32;

[assembly: RegistryPermissionAttribute(SecurityAction.RequestMinimum,
    Read = @"HKEY_CURRENT_USER\Environment")]
[assembly: SecurityPermissionAttribute(SecurityAction.RequestMinimum,
    UnmanagedCode = true)]

class RemoteKey
{
    static void Main(string[] args)
    {
        RegistryKey environmentKey;
        string remoteName;

        // Check that an argument was specified when the 
        // program was invoked.
        if(args.Length == 0)
        {
            Console.WriteLine("Error: The name of the remote " +
                "computer must be specified when the program is " +
                "invoked.");
            return;
        }
        else
        {
            remoteName = args[0];
        }

        try
        {
            // Open HKEY_CURRENT_USER\Environment 
            // on a remote computer.
            environmentKey = RegistryKey.OpenRemoteBaseKey(
                RegistryHive.CurrentUser, remoteName).OpenSubKey(
                "Environment");
        }
        catch(IOException e)
        {
            Console.WriteLine("{0}: {1}", 
                e.GetType().Name, e.Message);
            return;
        }

        // Print the values.
        Console.WriteLine("\nThere are {0} values for {1}.", 
            environmentKey.ValueCount.ToString(), 
            environmentKey.Name);
        foreach(string valueName in environmentKey.GetValueNames())
        {
            Console.WriteLine("{0,-20}: {1}", valueName, 
                environmentKey.GetValue(valueName).ToString());
        }

        // Close the registry key.
        environmentKey.Close();
    }
}

[C++] 
#using <mscorlib.dll>
using namespace System;
using namespace System::IO;
using namespace System::Security::Permissions;
using namespace Microsoft::Win32;

[assembly: RegistryPermissionAttribute(SecurityAction::RequestMinimum,
    Read = "HKEY_CURRENT_USER\\Environment")];
[assembly: SecurityPermissionAttribute(SecurityAction::RequestMinimum,
    UnmanagedCode = true)];

void main(int argc, char* argv[])
{
    RegistryKey* environmentKey;

    // Check that an argument was specified when the 
    // program was invoked.
    if(argc == 1)
    {
        Console::WriteLine(S"Error: The name of the remote computer "
            S"must be specified as input on the command line.");
        return;
    }

    try
    {
        // Open HKEY_CURRENT_USER\Environment on a remote computer.
        environmentKey = RegistryKey::OpenRemoteBaseKey(
            RegistryHive::CurrentUser, 
            argv[1])->OpenSubKey(S"Environment");
    }
    catch(IOException* e)
    {
        Console::WriteLine("{0}: {1}", 
            e->GetType()->Name, e->Message);
        return;
    }

    // Print the values.
    Console::WriteLine(S"\nThere are {0} values for {1}.", 
        environmentKey->ValueCount.ToString(), environmentKey->Name);
    String* valueNames __gc [] = environmentKey->GetValueNames();
    for(int i = 0; i < environmentKey->ValueCount; i++)
    {
        Console::WriteLine("{0,-20}: {1}", valueNames[i], 
            environmentKey->GetValue(valueNames[i])->ToString());
    }

    // Close the registry key.
    environmentKey->Close();
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

.NET Framework セキュリティ:

  • SecurityPermission (アンマネージ コード内でリモート レジストリ キーにアクセスするために必要なアクセス許可) UnmanagedCode (関連する列挙体)

参照

RegistryKey クラス | RegistryKey メンバ | Microsoft.Win32 名前空間 | RegistryHive | OpenSubKey