web-dev-qa-db-ja.com

インストールされているすべてのアプリケーションを見つけるためのレジストリパス

私は速い質問があります:ISレジストリに他の場所がありますが、これは:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall

システムにインストールされているアプリケーションはどこにありますか?たとえば、IExplorerがこれらのレジスターのいずれにもないためです。他にどこを見なければなりませんか?インストールされているアプリケーションを配置できるすべての場所が必要です。

ご協力いただきありがとうございます ;)

7
user1618465

最も信頼できるオプションは、おそらくWindows管理インターフェイス(WMI)を使用して、Windowsインストーラーによってインストールされたソフトウェアを列挙することです。

こちらをご覧ください
インストール済みソフトウェアの列挙
Win32_Productクラス

これは、Internet Explorerが表示されることを保証するものではないことに注意してください。 Internet Explorerは、現在そこにあるすべてのWindowsコンピューターに存在することになると思います。マイクロソフトでは、これをオペレーティングシステムの一部と見なしています。

ただし、 どのバージョンのIEがインストールされている )かを確認できます。

5
Robert Harvey

この情報を探していましたが、しばらくして、そのためのプログラムを書いたことを思い出しました。みんなのために、あるいは将来の私のために。

class Program
{
    //using Microsoft.Win32;
    //using System.IO;
    static void Main(string[] args)
    {
        string uninstallKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall";
        RegistryKey regKey = Registry.LocalMachine.OpenSubKey(uninstallKey);
        string[] subKey = regKey.GetSubKeyNames().Select((c)=>
        {
            RegistryKey rk = regKey.OpenSubKey(c);
            string displayName = (string)rk.GetValue("DisplayName");
            if (string.IsNullOrEmpty(displayName)) return "";
            return displayName + string.Format(" => [{0}]", c);
        }).ToArray<string>();
        string filename = "ProgramList.txt";
        if (File.Exists(filename)) File.Delete(filename);
        StreamWriter sw = File.CreateText(filename);
        foreach (string appName in subKey.OrderBy(c=>c))
        {
            if (appName != "" && !appName.StartsWith("{"))
            {
                Console.WriteLine(appName);
                sw.WriteLine(appName);
            }
        }
        sw.Close();
    }
}
0
antonio