9

「インストール済みのアプリケーション」とは、基本的には [コントロール パネル] -> [プログラムの追加と削除] に表示されるすべてのアプリケーションを意味します。

私は Python でそれを行うことを好みますが、C または C++ も問題ありません。

4

7 に答える 7

12

コントロール パネルの [プログラムの追加と削除] に表示されるインストール済みアプリケーションのリストを意味する場合は、次のレジストリ キーで見つけることができます。

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall

レジストリ ツリーの構造の詳細については、こちらを参照してください

レジストリから値を読み取るには、Python でwinreg APIを使用する必要があります。

于 2009-04-29T14:06:25.900 に答える
10

Win32_Product WMI (Windows Management Instrumentation) クラスを確認してください。Python での WMIの使用に関するチュートリアルを次に示します。

于 2009-04-29T14:05:59.643 に答える
8

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

于 2009-04-29T15:57:31.497 に答える
7

Microsoft Script Repository には、インストールされているすべてのソフトウェアを一覧表示するためのスクリプトがあります。

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
于 2009-04-29T22:23:37.730 に答える
6

私が見た中で最高のレジストリ ベースの実装は、http: //www.vbforums.com/showthread.php?t=598355 に投稿された Chris Wright (chris128) によって書かれたものです。複数のレジストリ キーを使用し、現在ここに投稿されている回答よりもはるかに複雑です。Add/Remove Programs アプリと同じ結果が得られるようで、ARP アプリと同様に、アップデートを含めるオプションも提供します。

VB.NET で実装されていますが、C# や IronPython などの他の .NET 言語に簡単に変換できるはずです。最初に IronPython に変換すると、必要に応じて通常の Python に移植するのがかなり簡単になると思いますが、私はそれを自分で C# に変換しただけで、コードを少しクリーンアップしました。

指摘すべき小さなバグが 1 つだけあります。GetUserInstallerKeyPrograms() は、ユーザー プログラムのバージョンを抽出しても、リストに追加しません。ただし、これは簡単に修正できます。

于 2012-03-18T08:30:37.160 に答える
3

xpおよびwin7でWMIを使用してインストールされているソフトウェアのリストを取得するためのC#.netコード(win7ではwmiが唯一の方法です)

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

        foreach (ManagementObject software in searcher.Get()) {
            Console.WriteLine(software["Caption"]);
        }
于 2010-08-18T11:43:00.353 に答える