- PR -

C#でインストールされてるソフトを列挙する方法について

1
投稿者投稿内容
ゆきお
常連さん
会議室デビュー日: 2003/12/17
投稿数: 22
お住まい・勤務地: 名古屋市
投稿日時: 2005-04-08 11:25
こんにちは。ゆきおといいます。

C#でローカル端末にインストールされてるソフトを列挙するアプリケーションを作成しています。

【インストールされているソフトについて】
プログラムの追加と削除で
「プログラムの変更と削除」-「現在インストールされているプログラム」
の一覧に表示されるソフト

【環境】
OS:WindowsXP SP1
言語:Visual C#.NET + .Net Framework v1.1

【C#、ソースコード】
private void form1_Load(object sender, System.EventArgs e)
{
 ManagementObjectSearcher searcher = new ManagementObjectSearcher
   ("SELECT Name FROM Win32_Product");
 ManagementObjectCollection colResult = searcher.Get();
 ArrayList lstSoft = new ArrayList();
 if(colResult != null)
 {
  foreach (ManagementObject objItem in colResult)
  {
    lstSoft.Add(objItem["Name"].ToString());
  }
  colResult.Dispose();
  searcher.Dispose();
}

【問題点】
・Win32_Productを使用していますが、現在インストールされているプログラムに表示されているソフト一覧とWin32_Productで表示されるアプリケーションが一致しません。

【質問事項】
インストールされているソフト一覧の他の取得方法をご存知の方、ヒント等でも教えていただけると助かります。
はぎ丸
常連さん
会議室デビュー日: 2005/02/02
投稿数: 36
投稿日時: 2005-04-08 11:40
こんにちは。
実際に試したわけではないので恐縮ですが、
WMI(Windows Management Instrumentation)で試してみてはいかがでしょう??
調べてみたら↓のようなサンプルが出てきました。
ただ、上のサンプルはVB6(かな?)で記述されているので
下のサンプルと組み合わせたら・・・実装できるかも!です。

【インストール済みソフトウェアを取得する】
http://wmifun.atinfinity.net/wmisample/win32_softwarefeature.html

【WMI (Windows Management Instrumentation) 】
http://ukamen.hp.infoseek.co.jp/Programming/WMI/#SEC4
ゆきお
常連さん
会議室デビュー日: 2003/12/17
投稿数: 22
お住まい・勤務地: 名古屋市
投稿日時: 2005-04-08 13:08
はぎ丸様

ご返答ありがとうございます。
さっそく試してみました。
【コード修正】
SELECT Name FROM Win32_Product を Win32_SoftwareFeature に変更してみました。

【修正前の結果】
Visual Studio .NET Enterprise Developer 2003
Microsoft Office XP Professional


検索数:17

【修正後の結果】
Visual_Studio.NET_Enterprise
Crystal_Reports


検索数:372

どちらもある程度、値が帰るのですが根本的なことにインストールされたソフトを返すわけではないようです。もう少し自分でも調べてみます。

はぎ丸さんどうもありがとうございました。
VBのコードでWMIって結構あるのですが、C#でWMIってなかなかないですね。
nodera
大ベテラン
会議室デビュー日: 2003/09/08
投稿数: 200
投稿日時: 2005-04-08 14:03
こんにちは。

レジストリを直接見るってのはだめでしょうか?
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
の下にできるキーでDisplayNameの値があるものが、「現在インストールされているプログラム」の一覧に表示されているのではないかと思われます(確証ないけど)

ちなみに上のレジストリはWindows2000で確認したもの。XP等でも同じだと思われます。
ゆきお
常連さん
会議室デビュー日: 2003/12/17
投稿数: 22
お住まい・勤務地: 名古屋市
投稿日時: 2005-04-08 15:24
nodera様 こんにちは。

さっそく試してみました。確かにこれでほしい情報は取れそうですね。
ありがとうございます。

まだ試していないのですが、ただひとつ懸念されることがあって、今作成しているのはユーザ側のパソコンで使用するプログラムなんですが、OSはXPと2000を使用しています。ログインするユーザ権限がAdministratorではなくGuest権限のようです。その場合レジストリアクセスは無理のような気がしています。

 まだ未確認ですいません。ご返答感謝しております。
1

スキルアップ/キャリアアップ(JOB@IT)