web-dev-qa-db-ja.com

C#でのレジストリキーの読み取り

アプリケーションを開発し、クライアントコンピューターにインストールしました。私のアプリケーションでは、インストールパスを取得する必要があります。私のアプリケーションには、次のレジストリエントリがあります。

HKEY_LOCAL_MACHINE\SOFTWARE\MyApplication\[AppPath]

C#を使用してAppPathを読み取るにはどうすればよいですか?

48

これを参照してください http://www.codeproject.com/Articles/3389/Read-write-and-delete-from-registry-with-C

更新:

Microsoft.Win32名前空間の下でRegistryKeyクラスを使用できます。

RegistryKeyの重要な機能は次のとおりです。

GetValue       //to get value of a key
SetValue       //to set value to a key
DeleteValue    //to delete value of a key
OpenSubKey     //to read value of a subkey (read-only)
CreateSubKey   //to create new or edit value to a subkey
DeleteSubKey   //to delete a subkey
GetValueKind   //to retrieve the datatype of registry key
27
Javed Akram

あなたはcな名前の Registry.GetValueメソッド

113
SLaks
string InstallPath = (string)Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\MyApplication\AppPath", "Installed", null);    
if (InstallPath != null)
{
    // Do stuff
}

そのコードはあなたの価値を得るはずです。あなたがする必要があります

using Microsoft.Win32;

それが動作するように。

75
Miguel

次を使用して、レジストリがインストールされていると考える場所を取得できます。

(string)Registry.LocalMachine.GetValue(@"SOFTWARE\MyApplication\AppPath",
   "Installed", null);

または、次を使用して、アプリケーションの実際の起動元を確認できます。

System.Windows.Forms.Application.StartupPath

.exeの場所を相対パスとして使用して関連ファイルを検索する場合、後者は前者よりも信頼性が高くなります。 .NETアプリはレジストリにそれほど依存していないため、ユーザーはインストール後に簡単に移動でき、アプリを正常に動作させることができます。

StartupPathを使用すると、エントリが見つからない/間違っている/破損しているために惨めにクラッシュするのではなく、実行時にアプリでレジストリエントリを更新するなどの巧妙なこともできます。

また、レジストリ(Properties.Settings.Default.mySettingEtc)ではなく、値のストレージとしてアプリの設定機能を確認してください。標準の場所に単純なMyApp.exe.configファイルとして保存されるアプリやユーザーレベルの設定を読み書きできます。あらゆる種類のゴミを残す複雑な難解なインストール/アンインストールルーチンではなく、フォルダ構造の単純なコピー/削除または1つであるアプリケーションのインストール/削除を行う、過去(古き良きWin 3.1/DOS時代)からの素敵な爆発レジストリで、ハードドライブ全体に振りかけた。

7
B H

特定の型にキャストする場合は、このメソッドを使用できます。ほとんどの非プリミティブ型はデフォルトで直接キャストをサポートしないため、それらを適切に処理する必要があります。

  public T GetValue<T>(string registryKeyPath, string value, T defaultValue = default(T))
  {
    T retVal = default(T);

      retVal = (T)Registry.GetValue(registryKeyPath, value, defaultValue);

      return retVal;
  }
7
C0r3yh

microsoft.Win32を使用。

  string chkRegVC = "NO";
   private void checkReg_vcredist() {

        string regKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
        using (Microsoft.Win32.RegistryKey uninstallKey = Registry.LocalMachine.OpenSubKey(regKey))
        {
            if (uninstallKey != null)
            {
                string[] productKeys = uninstallKey.GetSubKeyNames();
                foreach (var keyName in productKeys)
                {

                    if (keyName == "{196BB40D-1578-3D01-B289-BEFC77A11A1E}" ||//Visual C++ 2010 Redistributable Package (x86) 
                        keyName == "{DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}" ||//Visual C++ 2010 Redistributable Package (x64) 
                        keyName == "{C1A35166-4301-38E9-BA67-02823AD72A1B}" ||//Visual C++ 2010 Redistributable Package (ia64) 
                        keyName == "{F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}" ||//Visual C++ 2010 SP1 Redistributable Package (x86) 
                        keyName == "{1D8E6291-B0D5-35EC-8441-6616F567A0F7}" ||//Visual C++ 2010 SP1 Redistributable Package (x64) 
                        keyName == "{88C73C1C-2DE5-3B01-AFB8-B46EF4AB41CD}"   //Visual C++ 2010 SP1 Redistributable Package (ia64) 
                        ) { chkRegVC = "OK"; break; }
                    else { chkRegVC = "NO"; }
                }
            }
        }
    }
1
Waruna Manjula