2010-01-16 9 views
9

मैंने पायथन में WinXP + पर स्थापित प्रोग्राम पुनर्प्राप्त करने के कई तरीके देखे हैं। उचित और सबसे मजबूत यह करने का तरीका क्या है?पायथन में सभी स्थापित विंडोज प्रोग्राम प्राप्त करने के लिए 'उचित' और विश्वसनीय तरीका?

वर्तमान में मैं HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall तक पहुंच रहा हूं और सूची प्राप्त करने के लिए वहां से प्रत्येक कुंजी पढ़ रहा हूं। (मुझे बताया गया है कि यह उचित चीजों को करने का तरीका नहीं है) मैंने ऐसा करने के लिए WMI/Win32com का उपयोग करने के उदाहरण भी देखे हैं, लेकिन उन कार्यान्वयनों के साथ टिप्पणियां देखी हैं जिन्हें डब्लूएमआई निश्चित रूप से बंद कर दिया जा सकता है मशीनें और यह एक बहुत विश्वसनीय समाधान नहीं है।

क्या कोई ऐसी विधि है जो स्थापित प्रोग्राम की सूची प्राप्त करने के लिए उचित और भरोसेमंद दोनों है? मैंने देखा है कि डब्ल्यूएमआई उदाहरणों में से कोई भी इस मशीन पर काम नहीं कर रहा है (इसलिए इसका उपयोग करने में मेरी अनिच्छा है, मैं केवल WinFLP चला रहा हूं; जो एक्सपी का एक छिपी हुई छंद है।)

मुझे टेकनेट भी मिल गया है आलेख जो मेरी खोजों को चालू कर दिया गया है जो मेरे प्रश्न पर एक समान उत्तर के लिए प्रदान किया गया है: http://gallery.technet.microsoft.com/ScriptCenter/en-us/154dcae0-57a1-4c6e-8f9f-b215904485b7 ध्यान दें कि प्लेटफ़ॉर्म के तहत सूचीबद्ध Vista/7 बहुत स्पष्ट रूप से "नोप" कहता है ... काम नहीं करेगा। तो डब्लूएमआई सौदा ऐसा लगता है कि यह कोई नहीं है ...

स्थापित पथ को पुनः प्राप्त करने में सक्षम होने के नाते भी एक उछाल होगा, क्योंकि अभी मेरा वर्तमान कोड किसी अन्य ड्राइव पर स्थापित करने के लिए खाता नहीं है, या एक गैर-डिफ़ॉल्ट निर्देशिका।

उत्तर

8

तकनीकी स्क्रिप्ट जिसे आप पूरी तरह से विन 7 (पायथन 2.5 32 बिट्स के साथ) के अंतर्गत काम करते हैं, और मैं वास्तव में नहीं देख सकता कि यह क्यों नहीं होना चाहिए।

वास्तव में, डब्लूएमआई दृष्टिकोण की वास्तविक कमजोरी यह है कि यह केवल विंडोज इंस्टालर के माध्यम से स्थापित उत्पादों को सूचीबद्ध करता है। तो यह आपको पूरी सूची नहीं देगा। कई कार्यक्रम विभिन्न इंस्टॉलरों का उपयोग करते हैं। बस (Win32_Product से चुनें *) के बीच के परिणामों की तुलना करें और नियंत्रण कक्ष में क्या प्रदर्शित होता है। इसलिए, जब तक कि आप सुनिश्चित न हों कि आपके लिस्टिंग में जो प्रोग्राम आपको घुमाता है वह एमएसआई के साथ स्थापित है, डब्लूएमआई निश्चित रूप से उत्तर नहीं है।

तो यह बहुत पाइथनिक नहीं हो सकता है, लेकिन जहां तक ​​मुझे पता है, सबसे अच्छा तरीका रजिस्ट्री का उपयोग करना है जैसा आपने किया है। यह वास्तव में नियंत्रण कक्ष कैसे काम करता है, इसलिए कम से कम विंडोज इसे करने का सबसे मजबूत तरीका मानता है।

2

डब्ल्यूएमआई स्थापित प्रोग्राम देखने के लिए सही तरीका है क्योंकि यह ओएस के विभिन्न संस्करणों में काम करेगा और आगे बढ़ने का समर्थन करेगा। विशिष्ट regkeys के लिए खोज रहे हैं विंडोज के विशिष्ट संस्करणों के लिए ठीक काम कर सकते हैं लेकिन भविष्य में काम करने की गारंटी नहीं है। बॉक्स सिंक की जांच करने के लिए यहां कुछ सरल पायथन कोड दिया गया है, जिसे मैंने अभी विंडोज 7 पर आजमाया था। ध्यान दें कि सभी फ़ील्ड प्रत्येक उत्पाद के लिए उपलब्ध नहीं होंगे, इसलिए ध्यान रखें कि ये 'कोई नहीं' होंगे।

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) 

डब्लूएमआई के साथ मैंने जो नकारात्मक देखा है, वह शुरू करना बहुत धीमा है।

संबंधित मुद्दे