2012-08-17 21 views
5

ローカルマシンのレジストリにアクセスする必要があるWPFユーティリティを作成して、プログラムのインストールパスを調べます。レジストリからのファイルインストールパスの取得

Regeditを使用してキーに移動し、名前、タイプ、およびデータを提供しました。インストールパスを示すデータ内に、インストールパスを抽出します。

\マイクロソフト\ Windowsの\ CurrentVersionの\アプリケーションのパス\

HKEY_LOCAL_MACHINE \ソフトウェアその後、私は、このキー内のフォルダにアクセスする必要があります。

私は、レジストリ内このキーに移動する必要があります知っていますインストールパスに関する情報。

-

+0

私はその後、特定のプログラムのインストールパスを抽出するために、キーを読みたいです。 – LouisColeman

+0

答えが出たときは、元の質問を編集する代わりに、投稿してください。 =) –

+0

ほとんどの状況では、レジストリにアクセスすることはお勧めしません。必要なものの多くは、Application&Environmentクラス(https://msdn.microsoft.com/en-us/library/system.windows.application(v))にあります。 = vs.110).aspx https://msdn.microsoft.com/en-us/library/system.environment(v=vs.110).aspxまたはconfigfileを使用する – MikeT

答えて

10

私の問題を解決しました。今後も解決策を求めている人には、メッセージが届きましたら、リソースを見つけるのは難しいです。

RegistryKey key = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\App Paths\myexe.exe"); 
string regFilePath = null; 

object objRegisteredValue = key.GetValue(""); 

registeredFilePath = value.ToString(); 
+3

有益な回答ありがとうございます。開いているレジストリキーに関連付けられたシステムハンドルを解放するには、 'key'を配置する必要があります。あなたは 'using'ステートメントで 'key'の使用をラップすることができます。 – Ron

0

この質問は非常に参考になりました。私は新しいタプルで遊びたいヘルパークラスを思いついた。

使用例:

public string SkypeExePath => InstalledApplicationPaths.GetInstalledApplicationPath("lync.exe"); 

クラス:

public static class InstalledApplicationPaths 
{ 

    public static string GetInstalledApplicationPath(string shortName) 
    { 
     var path = GetInstalledApplicationPaths().SingleOrDefault(x => x?.ExectuableName.ToLower() == shortName.ToLower())?.Path; 
     return path; 
    } 

    public static IEnumerable<(string ExectuableName, string Path)?> GetInstalledApplicationPaths() 
    { 
     using (RegistryKey key = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\App Paths")) 
     { 
     foreach (var subkeyName in key.GetSubKeyNames()) 
     { 
      using (RegistryKey subkey = key.OpenSubKey(subkeyName)) 
      { 
       yield return (subkeyName, subkey.GetValue("")?.ToString()); 
      } 
     } 
     } 
    } 

} 
関連する問題