2009-04-29 13 views
6

「インストールされたアプリケーション」とは、基本的に[コントロールパネル] - [プログラムの追加と削除]で表示されるアプリケーションを意味します。Windows XPにインストールされているすべてのアプリケーションを列挙/一覧表示するにはどうすればよいですか?

私はPythonでやりたいと思っていますが、CやC++でも問題ありません。

+0

「インストール済みアプリケーション」はどのように定義しますか? –

+0

清算が追加されました。 – sharkin

答えて

10

あなたが追加で表示され、インストールされたアプリケーションのリストを意味する場合は、\レジストリキーでそれを見つけることができ、コントロールパネルの[プログラムの削除:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall 

more info about how the registry tree is structured can be found here

pythonでwinreg APIを使用してレジストリから値を読み取る必要があります。

+0

Dang。あなたは私にそれを打つ。 –

+0

私のシステムではこのキーは空です。あなたのリンクの一番下にあるOSを確認すると、WinXPでないことがわかります。 – sharkin

+0

@ R.A、このレジストリキーには多くのサブキー(サブフォルダ)が含まれています。それぞれは、アンインストールリストのプログラムを表します。上記のリンクのキーの構造についてお読みください。 – Aziz

10

Win32_Product WMI(Windows Management Instrumentation)クラスを参照してください。 Here's a tutorialはPythonでWMIを使用しています。

+0

これは1秒です。 WMIに慣れれば、他のWindows管理関連のタスクに役立ちます。私は最近、C++のWMIの使い方のサンプルを書いています。 http://blog.emptycrate.com/node/376​​ – lefticus

+4

ただし、いくつかの注意点があります。一部のPCではWMIを無効にすることができます。また、コントロールパネルのアプレットに表示されているすべてのアプリケーションはリストされていません。 – atzz

8

コントロールパネルは公式の方法であるWin32 COM APIを使用します(Googleグループ、Win32を参照)
レジストリを絶対に信頼しないでください。

+0

+1は「レジストリに決して依存しない」 – Rob

+2

何年も遅れていますが、* COM APIを使用していないため-1です。ユーズネットグループは大きく、答えに「go Google it」と言っても十分ではありません。 – andlabs

6

Microsoft Script Repositoryは、script for listing all installed softwareです。 XPとwin7のでWMIを使用してインストールされているソフトウェアのリストを取得するための

import win32com.client 
strComputer = "." 
objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator") 
objSWbemServices = objWMIService.ConnectServer(strComputer,"root\cimv2") 
colItems = objSWbemServices.ExecQuery("Select * from Win32_Product") 
for objItem in colItems: 
    print "Caption: ", objItem.Caption 
    print "Description: ", objItem.Description 
    print "Identifying Number: ", objItem.IdentifyingNumber 
    print "Install Date: ", objItem.InstallDate 
    print "Install Date 2: ", objItem.InstallDate2 
    print "Install Location: ", objItem.InstallLocation 
    print "Install State: ", objItem.InstallState 
    print "Name: ", objItem.Name 
    print "Package Cache: ", objItem.PackageCache 
    print "SKU Number: ", objItem.SKUNumber 
    print "Vendor: ", objItem.Vendor 
    print "Version: ", objItem.Version 
3

C#.NETコードは

WqlObjectQuery wqlQuery = 
     new WqlObjectQuery("SELECT * FROM Win32_Product"); 
     ManagementObjectSearcher searcher = 
      new ManagementObjectSearcher(wqlQuery); 

     foreach (ManagementObject software in searcher.Get()) { 
      Console.WriteLine(software["Caption"]); 
     } 
4

私が見た中で最高のレジストリベースの実装(WMIはwin7のでは唯一の方法です) Chris Wright(chris128)が書いたもので、投稿者はhttp://www.vbforums.com/showthread.php?t=598355です。複数のレジストリキーを使用しており、現在ここに投稿されている回答よりもはるかに複雑です。それは、アプリケーションの追加と削除のアプリケーションに同じ結果をもたらすようであり、ARPアプリケーションのように、更新を含めるオプションも提供します。

VB.NETで実装されていますが、C#やIronPythonなどの他の.NET言語に簡単に変換できます。私はIronPythonへの変換が最初に普通のPythonに移植するのはかなり簡単だと思っています。しかし、それをC#に変換してコードを少しだけ整理しました。

GetUserInstallerKeyPrograms()は、ユーザープログラムのバージョンを抽出しても、そのリストにユーザープログラムのバージョンを追加しません。これは簡単に修正できます。

+0

ありがとう、これは最も有用です。 –

関連する問題