0

レジストリ内のすべてのプログラムのインストール日とバージョン情報を取得する必要があるプログラムを作成しています。すべてのプログラムのリストを取得できますが、プログラム自体に関する情報にアクセスする方法がわかりません。ファイルが置かれている場所へのファイルパスを特定できれば、この情報にアクセスできます。興味のあるプログラムはすべてフォルダーにあることをたまたま知っていC:\\Program Files (x86)\ますが、それらはこのフォルダー内の特定できないサブフォルダーにあります。取得しているファイルのファイルパスを取得する方法についてのアイデアはありますか?

これが私のコードです:

public List<BSAApp> getInstalledApps( string computerName )
        {
            List<BSAApp> appList = new List<BSAApp>();

            ManagementScope ms = new ManagementScope();
            ms.Path.Server = computerName;
            ms.Path.NamespacePath = "root\\cimv2";
            ms.Options.EnablePrivileges = true;
            ms.Connect();

            ManagementClass mc = new ManagementClass( "StdRegProv" );
            mc.Scope = ms;

            ManagementBaseObject mbo;
            mbo = mc.GetMethodParameters( "EnumKey" );

            mbo.SetPropertyValue( "sSubKeyName", "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths" );

            string[] subkeys = (string[])mc.InvokeMethod( "EnumKey", mbo, null ).Properties["sNames"].Value;

            if( subkeys != null )
            {
                foreach( string strKey in subkeys )
                {
                    string path = ?????
                    FileVersionInfo info = FileVersionInfo.GetVersionInfo( path );
                    appList.Add( new BSAApp( strKey, info.ProductVersion ) );                    
                }
            }

            return appList;
        }
4

1 に答える 1

2
ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT * FROM  Win32_Product");
foreach(ManagementObject mo in mos.Get())
{
  Console.WriteLine(mo["Name"]);
  Console.WriteLine(mo["InstallState"]);
}

システムにインストールされているアプリケーションを取得する

しかし、そのスレッドで述べたように、それには独自の欠点があります。

于 2012-07-09T19:53:45.780 に答える