सार्वजनिक संपत्तियों को MSI फ़ाइल से पुनर्प्राप्त करना


12

क्या विंडोज MSI फ़ाइल से उपलब्ध सार्वजनिक गुणों को पुनर्प्राप्त करने के लिए एक उपकरण या तंत्र है?

कुछ विक्रेता जो MSI फ़ाइलों की आपूर्ति करते हैं, वे स्वयं इन का दस्तावेजीकरण नहीं करते हैं, इसलिए मैं यह देखने के लिए उत्सुक हूं कि क्या स्रोत कोड के बिना इन्हें उजागर करने का कोई तरीका है।


8
Microsoft का ORCA , Pantaray का SuperORCA और अधिकांश अन्य MSI संपादन आपको तालिका सहित किसी भी तालिका को ब्राउज़ / संपादित करने की अनुमति देंगे Property। क्या आपके पास एमएसआई में सिर्फ पोकिंग-अराउंड के बाहर एक विशिष्ट कार्य-प्रवाह या उपयोग-मामला है?
jscott

2
मैं उपलब्ध सार्वजनिक संपत्तियों को समझना चाहता था ताकि वे विक्रेता या प्रलेखन को क्वेरी किए बिना स्थापना के दौरान सटीक रूप से पारित हो सकें, (क्योंकि यह संभव नहीं है)। कठपुतली के साथ हम स्थापना के दौरान एमएसआई गुणों में गुजर सकते हैं (हम misexec.exe को लपेटते हैं), इसलिए इसकी क्षमता है।
केन बार्बर

1
अन्य सार्वजनिक गुण हो सकते हैं जिन्हें आप स्थापना को नियंत्रित करने के लिए पास कर सकते हैं, हालांकि वे गुण तालिका में सूचीबद्ध नहीं हैं। गुणों को गतिशील रूप से एक शर्त के आधार पर सेट किया जा सकता है, उदाहरण के लिए रजिस्ट्री खोज। इसलिए विक्रेता प्रलेखन सूचना का बेहतर स्रोत है।
एलेक्सी इवानोव

आप वर्बोज़ लॉगिंग के साथ इंस्टॉलेशन भी चला सकते हैं, यह देखने के लिए कि कैसे गुण उनके मूल्यों को बदलते हैं।
एलेक्सी इवानोव

देरी के बारे में क्षमा करें - मैंने ओर्का और इसके आकर्षक की कोशिश की है, लेकिन मैंने आपके द्वारा @AlexeyIvanov के वर्णन के व्यवहार की पुष्टि की है - अर्थात, कुछ गुण प्रकट नहीं होंगे। मैंने इसकी पुष्टि splunk.msi और इसके डॉक्स के साथ की। मैं अनुमान लगा रहा हूं कि जो लोग ओर्का में दिखाई देते हैं उनमें चूक है, लेकिन यह एक विहित सूची नहीं है। क्या आप क्रिया लॉगिंग कार्यप्रणाली के बारे में थोड़ा और बता सकते हैं?
केन बार्बर

जवाबों:


8

लेसमी एक कमांड लाइन के साथ-साथ .msi से किसी भी विशेषता को प्राप्त करने के लिए इंटरैक्टिव अनुप्रयोग प्रदान करता है।

अंत में, .msi खोलें और फिर टेबल व्यू पर जाएं और "प्रॉपर्टी" चुनें या टाइप करें। हालाँकि जब यह संपत्ति के नाम देता है तो यह उक्त संपत्ति के लिए वैध मान नहीं देता है। (या मैंने देखने के लिए सही जगह नहीं खोजी है।)

कमांड लाइन को सांत्वना देने के लिए प्रॉपर्टीज टेबल को सूचीबद्ध करें (निराशाजनक रूप से, सरल > output.csvरीडायरेक्ट के साथ कैप्चर नहीं किया जा सकता )

lessmsi l -t Property ...\path\to\setup.msi

1

यह देखते हुए कि MSI फ़ाइल सार्वजनिक गुणों को एक आंतरिक डेटाबेस में संग्रहीत करती है, आप वास्तव में VBScript और SQL का उपयोग करके उन्हें केवल क्वेरी कर सकते हैं।

यहां एक उदाहरण स्क्रिप्ट है जो MSI फ़ाइल में संग्रहीत सभी गुणों को वापस कर देगा। यह सार्वजनिक संपत्तियों को परिभाषित करने के लिए बड़े अक्षरों का उपयोग करने के लिए सम्मेलन है, इसलिए यह है कि वे आमतौर पर पहचाने जाने योग्य कैसे होते हैं।


1

लोम्सी एक महान उपकरण है जो निश्चित रूप से यहां काम करता है यदि आप अपने जीयूआई को खोलने और कुछ मैनुअल जांच करने के लिए तैयार हैं। हालाँकि, मैं कहूंगा, कि निम्नलिखित कमांड मज़बूती से सभी गुणों को प्रस्तुत नहीं करता है:

lessmsi l -t Property <msi_name>

(बेहतर) गारंटी का एक तरीका है कि आपको सभी संभावित गुण मिलें, वास्तव में या तो इंस्टॉलेशन, मरम्मत या MSI फ़ाइल के साथ अनइंस्टॉल करना या प्रक्रिया को लॉग इन करना है। निम्न आदेश केवल गुण रिकॉर्ड करता है और कुछ नहीं:

<msi_name> /lp! <msi_property_logfile>

उपरोक्त आदेश इसके बराबर है:

msiexec /lp! <msi_property_logfile> /i <msi_name>

मेरे पसंदीदा तरीका है, तथापि, करने के लिए है नहीं वास्तव में (और करने के लिए बस के बजाय निकालने) स्थापित करें / निकालें / मरम्मत। इस विधि में लोम्सी पर जो फायदे हैं वह यह है कि इसे तृतीय-पक्ष उपयोगिता (यानी लोम्सी ) की आवश्यकता नहीं है, और इसके लिए आपको किसी इंस्टॉलेशन के साथ गड़बड़ करने की आवश्यकता नहीं है। यह देखते हुए कि आपके पास वास्तव में प्रोग्राम को स्थापित करने के लिए पर्याप्त डिस्क स्थान है, आप कर सकते हैं:

msiexec /a <msi_name> /lp! <msi_property_logfile> TARGETDIR=<absolute_path_to_extract_to>

ध्यान दें कि <absolute_path_to_extract_to>एक गैर-प्रासंगिक निर्देशिका को इंगित कर सकता है (कमांड आवश्यक निर्देशिकाओं को बनाएगा या विफल होगा)।

यदि आप इंस्टॉलेशन UI से घृणा करते हैं तो आप जिस भी कारण से /qrविकल्प को जोड़ सकते हैं , जो 'कम' करेगा और संभवतः संपत्ति लॉगिंग प्रक्रिया को ख़राब किए बिना यूआई को समाप्त कर देगा। हालांकि चेतावनी दी है - अगर आप कम यूआई (अर्थात। /qb| /passiveया /qn| /quiet) की तुलना में "कम" जाते हैं , तो आपके <msi_property_logfile>कुछ गुण गायब हो सकते हैं।


इस पद्धति की समस्या यह है: आपको वास्तव में इंस्टॉलर को चलाना होगा। यहां तक ​​कि आप इसे एक नॉनस्टैंडर्ड टारगेट पर स्थापित करते हैं, फिर भी आप रजिस्टरों को गड़बड़ कर देते हैं।
वांग

0

कार्बन पॉवर्सशेल मॉड्यूल का उपयोग करके अब मैं इसे कर रहा हूं। मॉड्यूल प्रकार को स्थापित करने के लिए:

Install-Module -Name 'Carbon' -AllowClobber

फिर बस

msi your_msi_path.msi

उदाहरण:

msi putty-64bit-0.70-installer.msi

ProductName                 ProductVersion Manufacturer ProductCode                         

-----------                 -------------- ------------ -----------                         

PuTTY release 0.70 (64-bit) 0.70.0.0       Simon Tatham 45b3032f-22cc-40cd-9e97-4da7095fa5a2

-1

मुझे लगता है कि अब शायद इसे करने का सबसे अच्छा तरीका शक्तियों का उपयोग कर रहा है। यहाँ एक स्क्रिप्ट है जो वास्तव में अच्छी तरह से काम करती है: https://gallery.technet.microsoft.com/scriptcenter/Get-MsiDatabaseProperties-09d9c87c


यह उत्तर केवल एक लिंक है, जो बदल सकता है / गायब हो सकता है।
डेविड माकॉन

अन्य उत्तर हैं जो केवल एक लिंक हैं। मैं अन्य लोगों के कोड को कॉपी और पेस्ट करने में सहज महसूस नहीं करता। मुझे लगता है कि मेरा जवाब एक वैकल्पिक विकल्प देता है और मैं वास्तव में डाउन वोट को नहीं समझता।
गिगी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.