2008-09-08 18 views
0

私は古いコードを継承しています(実際には、WTF-yよりも多くの文書化されていないバグを修正したwartyを意味します)。 。リモートでレジストリに接続して例外を取得する

try 
{ 
    remoteKey = RegistryKey.OpenRemoteBaseKey(
     RegistryHive.LocalMachine, addr.Value).OpenSubKey(
     "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"); 
    return 1; 
} 
catch (IOException e) 
{ 
    IOException myexception = e; 
    //Console.WriteLine("{0}: {1}: {2}", 
    // e.GetType().Name, e.Message, addr.Value); 
    return 2; 
} 
catch (UnauthorizedAccessException e) 
{ 
    UnauthorizedAccessException myexception = e; 
    //Console.WriteLine("{0}: {1}: {2}", 
    // e.GetType().Name, e.Message, addr.Value); 
    return 3; 
} 
catch (System.Security.SecurityException e) 
{ 
    System.Security.SecurityException myexception = e; 
    //Console.WriteLine("{0}: {1}: {2}", 
    // e.GetType().Name, e.Message, addr.Value); 
    return 4; 
} 

は今、私は2つの問題を抱えて:ここでは、それはアドオンを取得するには、リモートレジストリに接続する方法/キープログラムを削除します

  • は、私は知っているが、なぜにIOException - それは、Windows以外のだ場合マシンはそれを投げるでしょう。 UnauthorizedAccessExceptionとSecurityExceptionの違い私はあまり明確ではありません。誰もがアイデアを持っていますか?

  • このコードは、あなたがローカルログオンをすべて使用しないかもしれないと思われる前に設計されています。とにかく、レジストリにリモートで接続するための認証方法を試すことができません。このコードは、WMIからこの情報を取得できない場合にのみ使用されるようです。

いずれかの助けがあれば助かります。

答えて

0

JohnのMSDNへのポインタが、UnauthorizedAccessExceptionの理由を回答しました.OutRemoteBaseKeyを使用してリモートでキーにアクセスしようとすると表示されます。

コンピュータのセキュリティコンテキストを変更することに少し気をつけています。WMI(レジストリに大部分の重い部分があります)を使用してレジストリにアクセスする方法については、hereを参照しています。だから私は代わりにそれを試みるかもしれません。

1

おそらく、偽装を使用して、リモートレジストリメソッドを呼び出すスレッドの資格情報を変更する必要があります。 MSDNに関する情報は、こちら(linky)を参照してください。基本的に、スレッドには、管理された呼び出しと管理されていない呼び出しを行うためのセキュリティコンテキストがあります。

1

MSDNによれば、UnauthorizedAccessExceptionはであり、OpenSubKeyではがスローされていません。だから私はそれが必要ではないと思う。

関連する問題