簡體   English   中英

用Python獲取所有已安裝的Windows程序的'正確'和可靠的方法?

[英]'proper' & reliable way to get all installed windows programs in Python?

我已經看到了很多在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的交易看起來像是不行......

能夠檢索已安裝的路徑也是一個好處,因為現在我的當前代碼不會考慮在另一個驅動器或非默認目錄中安裝的人。

您所指的technet腳本在Win 7(使用Python 2.5 32位)下完美運行,我真的不明白為什么它不應該。

實際上,WMI方法的真正弱點是它只列出了通過Windows Installer安裝的產品。 所以它不會給你完整的清單。 許多程序使用不同的安裝程序。 只需比較(Select * from Win32_Product)和控制面板中顯示的結果。 因此,除非您確定您的列表中的程序是使用MSI安裝的,否則WMI肯定不是答案。

所以它可能不是非常pythonic,但據我所知,最好的方法是使用注冊表。 這實際上是控制面板的工作方式,因此至少Windows認為它是最強大的方法。

WMI是查找已安裝程序的正確方法,因為它可以在不同版本的操作系統中運行,並且將在未來得到支持。 尋找特定的regkeys可能適用於特定版本的Windows,但不保證將來可以使用。 下面是一些簡單的python代碼,用於檢查我剛剛在Windows 7上嘗試過的Box Sync。請注意,並非所有字段都可用於每個產品,因此請注意這些字段為“無”。

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看到的缺點是啟動速度很慢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM