- - PR -
C#でインストールされてるソフトを列挙する方法について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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-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 |
|
投稿日時: 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ってなかなかないですね。 |
|
投稿日時: 2005-04-08 14:03
こんにちは。
レジストリを直接見るってのはだめでしょうか? HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall の下にできるキーでDisplayNameの値があるものが、「現在インストールされているプログラム」の一覧に表示されているのではないかと思われます(確証ないけど) ちなみに上のレジストリはWindows2000で確認したもの。XP等でも同じだと思われます。 |
|
投稿日時: 2005-04-08 15:24
nodera様 こんにちは。
さっそく試してみました。確かにこれでほしい情報は取れそうですね。 ありがとうございます。 まだ試していないのですが、ただひとつ懸念されることがあって、今作成しているのはユーザ側のパソコンで使用するプログラムなんですが、OSはXPと2000を使用しています。ログインするユーザ権限がAdministratorではなくGuest権限のようです。その場合レジストリアクセスは無理のような気がしています。 まだ未確認ですいません。ご返答感謝しております。 |
1