レジストリ内のすべてのプログラムのインストール日とバージョン情報を取得する必要があるプログラムを作成しています。すべてのプログラムのリストを取得できますが、プログラム自体に関する情報にアクセスする方法がわかりません。ファイルが置かれている場所へのファイルパスを特定できれば、この情報にアクセスできます。興味のあるプログラムはすべてフォルダーにあることをたまたま知ってい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;
}