11

私はPythonでWinXP+にインストールされたプログラムを取得する多くの方法を見てきました。これを行うための適切最も堅牢な方法は何ですか?

HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall現在、リストを取得するために、そこから各キーにアクセスして読み取っています。(これは適切な方法ではないと言われています)これを行うためにWMI / Win32comを使用する例も見ましたが、特定のマシンでWMIがオフになっている可能性があるというコメントとそれらの実装を見てきました。信頼性の高いソリューションではないこと。

インストールされているプログラムのリストを取得するための適切で信頼できる方法はありますか?私が見たWMIの例はどれもこのマシンで機能していません(したがって、使用するのは気が進まないので、WinFLPのみを実行しています。これはXPのストリップバージョンです)。

私の検索で見つかったTechNetの記事も見つけたようです。これは、私の質問に対する同様の回答に提供されています:http: //gallery.technet.microsoft.com/ScriptCenter/en-us/154dcae0-57a1-4c6e- 8f9f-b215904485b7 プラットフォームの下にリストされているVista/7は、「いいえ」と非常に明確に示されていることに注意してください...動作しません。したがって、WMIの取引は失敗のようです...

現在の私の現在のコードは、別のドライブやデフォルト以外のディレクトリにインストールされている人を考慮していないため、インストールされているパスを取得できることも利点です。

4

2 に答える 2

8

あなたが参照しているtechnetスクリプトは、Win 7(Python 2.5 32ビット)で完全に機能しますが、なぜそうすべきでないのか私にはわかりません。

実際、WMIアプローチの本当の弱点は、Windowsインストーラーを介してインストールされた製品のみを一覧表示することです。したがって、完全なリストは提供されません。多くのプログラムは異なるインストーラーを使用します。(Win32_Productから*を選択)とコントロールパネルに表示される結果を比較するだけです。したがって、リストに挿入されているプログラムがMSIとともにインストールされていることが確実でない限り、WMIは間違いなく答えではありません。

したがって、あまりPython的ではないかもしれませんが、私が知る限り、最善の方法は、これまでと同じようにレジストリを使用することです。これは実際にはコントロールパネルがどのように機能するかであるため、少なくともWindowsはそれを行うための最も堅牢な方法であると考えています。

于 2010-01-17T15:56:19.333 に答える
3

WMIは、インストールされているプログラムを探す正しい方法です。これは、OSのさまざまなバージョンで機能し、今後サポートされるためです。特定のregkeyを探すことは、特定のバージョンのWindowsで正常に機能する可能性がありますが、将来的に機能することは保証されていません。これは、Windows7で試したBoxSyncをチェックするための簡単なPythonコードです。すべての製品ですべてのフィールドが使用できるわけではないため、これらは「なし」になることに注意してください。

import wmi
w = wmi.WMI()
for p in w.Win32_Product():
    if 'Box, Inc.' == p.Vendor and p.Caption and 'Box Sync' in p.Caption:
        print 'Installed {}'.format(p.Version)

WMIで見た欠点は、起動が非常に遅いことです。

于 2015-02-17T19:28:58.840 に答える