2016-09-02 8 views
1

レジストリからREG_SZ値を読み込み、後で使用するために文字列に変換しようとしています。レジストリ値を読み取り、文字列としてキャスト

は、私が言って、しかし

RegistryKey key 
ArrayList m = new ArrayList(); 
if(Environment.is64BitOperatingSystem) 
    key = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64); 
else 
    key = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32); 

if(key != null) 
{ 
    object o = key.openSubKey(SOFTWARE\\xx\\yy\\zz).GetValue("Version") 
    if (o != null) 
    m.add(o.toString()) 
} 

、私はこれを行う際に、例外がスローされますを使用して、レジストリからそれを読ん

Application:abc.exe 
Framework Version: v4.0.30319 
Description: The process was terminated due to an unhandled exception. 
Exception Info: System.InvalidCastException 

私がしようとしている方法に問題がありますこのレジストリ値をキャストしますか? 操作して比較するには文字列として必要です。

+0

REG_SZ型のレジストリ変数はありますか? [MSDN](https://msdn.microsoft.com/en-us/library/windows/desktop/ms724884(v = vs.85).aspx) – NtFreX

+1

また、私は 'oが文字列であるとは思わない例外を介して、キャストが失敗した場合は 'null'を返します。あなたの問題は他の場所にある可能性があります(おそらく、バージョンコンストラクタで)?実行中の実際のコードに近い、より良いスタックトレースとコードは、おそらくさらにトラブルシューティングするために必要です。 – gnalck

+0

はい!それは "バージョン"と呼ばれるREG_SZです – Zach

答えて

1

修正済み!それは文字列へのキャストが問題ではなかったように見えます。 私はArrayList

o.toString() 

を追加しようとArrayListからstringキャストの問題を引き起こしていた追加されました。

ありがとうございます!