1

今日、私は今まで経験したことのない問題に出くわしました。Windows レジストリの値からファイルが存在するかどうかを確認しようとしています。具体的には、Flight Simulator からインストール パスを取得し、モジュールがインストールされているかどうかを確認しています。

私はレジストリキーをうまく取得し、(オブジェクトから)文字列に変換しますが、その後にファイル名を連結できないようです(前は問題ありません)。

RegistryKey pRegKey = Registry.CurrentUser;
pRegKey = pRegKey.OpenSubKey(@"Software\Microsoft\Microsoft Games\Flight Simulator\10.0");
string fSPath = pRegKey.GetValue("AppPath").ToString(); // Receives "S:/Apps/FSX/"

このようなメッセージボックスを表示すると、連結されません:

MessageBox.Show(fSPath + "Modules");
4

2 に答える 2

3

の他のオーバーロードされたメソッドを試してくださいGetValue:

GetValue Method (String, Object)
GetValue Method (String, Object, RegistryValueOptions)

メソッドを使用RegistryKey.GetValueKindして、指定された名前に関連付けられた値のレジストリ データ型を取得します。

文字列には3 つのレジストリ データ型があります。

Stringnull で終わる文字列。この値は、Win32 APIレジストリ データ型と同等REG_SZです。

ExpandString%PATH%値の取得時に展開される環境変数 ( など) への展開されていない参照を含むヌル終了文字列。Win32 APIこの値は、レジストリ データ タイプと同等REG_EXPAND_SZです。

MultiString 2 つの null 文字で終了する、null で終わる文字列の配列。Win32 APIこの値は、レジストリ データ タイプと同等REG_MULTI_SZです。

于 2013-01-05T12:04:42.553 に答える
2

次の行を追加します。

string fSPath = fsPath.Replace("\0","");

メッセージボックスを使用する前に。

于 2013-01-05T11:48:00.103 に答える