2010-08-13 3 views
8

मैंने GUID (0733556C-37E8-4123-A801-D3E6C5151617) के साथ कुछ एमएसआई स्थापित किया है। कार्यक्रम रजिस्ट्री में पंजीकृत: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ स्थापना रद्द करें \()रजिस्ट्री में प्रोग्राम स्थान कैसे ढूंढें, अगर मुझे एमएसआई GUID पता है?

मूल्य UninstallString = MSIEXEC.EXE/मैं (0733556C-37E8-4123-A801-D3E6C5151617)

मेरा सवाल है: कैसे उपयोगिता MsiExec.exe उस फ़ाइल के नाम और पथ को जानता है जिसे आप प्रोग्राम को हटाते समय चलाने के लिए चाहते हैं? रजिस्ट्री में जहां यह जानकारी मिल सकती है?

+0

पहले से ही बहुत अच्छे उत्तर हैं, लेकिन ** आपके स्थापित उत्पाद के बारे में जानकारी प्राप्त करने का सबसे आसान तरीका ** [** सरल पावरशेल कमांड ** का उपयोग कर रहा है] [https://stackoverflow.com/questions/29937568/how -can-i-find-the-product-guid-of-an-install-msi-setup/29937569 # 29937569) –

+0

इसे फिर से पढ़ना मुझे लगता है कि मैंने आपके प्रश्न को गलत तरीके से पढ़ा है।मुझे लगता है कि आपके प्रश्न का वास्तविक उत्तर यह है कि स्थापित उत्पादों के बारे में सभी जानकारी रजिस्ट्री में 'HKLM \ सॉफ़्टवेयर \ Microsoft \ Windows \ CurrentVersion \ Installer'' के अंतर्गत संग्रहीत की जाती है। यह ** विंडोज इंस्टालर डेटाबेस ** है और आपको सीधे यहां किसी भी मूल्य को स्पर्श नहीं करना चाहिए। इसके बजाय आप उन्हें [Win32 API कॉल (सी ++)] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa369426 (v = vs.85) .aspx) के माध्यम से एक्सेस कर सकते हैं या आप इसका उपयोग कर सकते हैं [COM स्वचालन] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa367810 (v = vs.85) .aspx) (आसान)। –

उत्तर

12

विंडोज़ विंडोज इंस्टालर कॉन्फ़िगरेशन जानकारी को छिपी हुई है और रजिस्ट्री में एन्क्रिप्ट की गई है। यह मानव आंखों के साथ ब्राउज़ करने योग्य नहीं है क्योंकि रजिस्ट्री के अन्य हिस्सों में हैं।

इस जानकारी को क्वेरी/संशोधित/हटाने के लिए, आपको एमएसआई कार्यों का उपयोग करने की आवश्यकता होगी।
(Installer Function Reference)

अपने विशेष प्रश्न के लिए, समारोह MsiGetProductInfo प्रयास करें।

+2

छिपी हुई और एन्क्रिप्टेड - वास्तव में? – Rup

+1

[विंडोज इंस्टालर, भाग 2 का ताओ] देखें (http://blogs.msdn.com/b/windows_installer_team/archive/2006/05/12/595950.aspx) [विंडोज इंस्टालर टीम ब्लॉग] से (http: //blogs.msdn.com/b/windows_installer_team/)। नियम 21 देखें: कॉन्फ़िगरेशन डेटा का उपयोग करने से बचें जो आपके पास नहीं है। यह कहता है, "यह डेटा इंस्टॉलर द्वारा प्रबंधित किया जाता है और उपयोगकर्ताओं या अनुप्रयोगों द्वारा सीधी पहुंच को हतोत्साहित किया जाता है, वास्तव में कुछ डेटा मैन्युअल रूप से हेरफेर करने में बहुत मुश्किल बनाने के लिए एन्कोड किया जाता है।" –

0

HKEY_CLASSES_ROOT\Installer\Products\ पर यह प्रमुख मानचित्र।

+0

HKEY_CLASSES_ROOT \ इंस्टॉलर \ Products \ में स्थापित प्रोग्राम के पथ शामिल नहीं हैं। मुझे सीए कहां मिलती है? – Yuriy

+1

इसे इंस्टॉल किए गए ऐप के पथ की आवश्यकता नहीं है, अगर यह 10 अनुप्रयोग स्थापित करता है, तो इसकी सभी आवश्यकताएं अनइंस्टॉलर (या .msi मॉड्यूल) का पथ है। कमांड लाइन पर "wmic product list" के आउटपुट को देखें। –

+0

वास्तव में मुझे msp पैच स्थापित करने से पहले उपलब्ध डिस्क स्थान का अनुमान लगाने के लिए एप्लिकेशन स्थान (डिस्क ड्राइव) निर्धारित करने की आवश्यकता है। क्या मैं स्थापित अनुप्रयोग का स्थान निर्धारित कर सकता हूं यदि मुझे केवल HKEY_LOCAL_MACHINE \ सॉफ़्टवेयर \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ {} में केवल guid पता है? – Yuriy

7

आप कमांड लाइन से कोशिश कर सकते,:

wmic product where "Name like '%your software here%'" get Name, Version, PackageCode 
+3

वाह शांत! लेकिन मेरे cmq का कहना है कि यह एक अमान्य क्वेरी है ... – BlackBear

1

Tarma सॉफ्टवेयर अनुसंधान कि मैं इस के लिए उपयोगी पाया से एक मुफ्त उपयोगिता नहीं है। इसे their website से प्राप्त करें।

7

डिस्क पर कैश किए गए इंस्टॉलर के वास्तविक स्थान को प्राप्त करने के लिए, विलियम लिरा के अनुसार, एमसीजीट प्रोडक्टइन्फो का उपयोग करने वाला एक सरल सी # प्रोग्राम है।

class Program 
{ 
    static void Main(string[] args) 
    { 
     Int32 len = 512; 
     System.Text.StringBuilder builder = new System.Text.StringBuilder(len); 
     MsiGetProductInfo("{89C098E5-C108-49F9-9B1D-10503C6D8A05}", "LocalPackage", builder, ref len); 
     Console.WriteLine(builder.ToString()); 
     Console.ReadLine(); 
    } 

    [DllImport("msi.dll", CharSet = CharSet.Unicode)] 
    static extern Int32 MsiGetProductInfo(string product, string property, [Out] StringBuilder valueBuf, ref Int32 len); 
} 
1

आपको किसी भी सॉफ्टवेयर की आवश्यकता नहीं है। यह विंडोज 10 में काम कर रहा है और मुझे लगता है कि यह विंडोज 7 के लिए भी मान्य है।

यदि आपका उत्पाद कोड 0733556C-37E8-4123-A801-D3E6C5151617 है। कुंजी मिलने के बाद कुंजी C65533708E7332148A103D6E5C516171 (मूल रूप से इसे उलट दिया गया) खोजने का प्रयास करें, इंस्टॉलप्रॉपर्टीज उपकुंजी के लिए ब्राउज़ करें, यदि मौजूद नहीं है, तो अन्य परिणाम खोजने का प्रयास करें। एक बार जब आप InstallProperties पा लेते हैं, तो स्थानीय पैकेज कुंजी को खोलें और ढूंढें। और फिर आपके पास एमएसआई पैकेजेज का मार्ग है जो एमएसआई आपके एप्लिकेशन को इंस्टॉल करते समय कैश के रूप में सहेजता है।

1

इस प्रश्न का आधार भ्रामक है क्योंकि रजिस्ट्री में अनइंस्टॉलस्ट्रिंग का उपयोग अनइंस्टॉल करते समय नहीं किया जाता है। आगे बढ़ें और परीक्षण करने के लिए स्ट्रिंग को बदलें - यह आपकी बदली हुई स्ट्रिंग का उपयोग नहीं करेगा।

हालांकि रजिस्ट्री में सामानों के संदर्भ आकर्षक हो सकते हैं, संक्षिप्त उत्तर यह है कि रजिस्ट्री में विंडोज इंस्टालर डेटा कार्यान्वयन विस्तार है। प्रश्न मूल रूप से पूछ रहा है कि कैसे MsiConfigureProduct (.... INSTALLSTATE_ABSENT ...) काम करता है, और यह कार्यान्वयन विवरण पर अनुमान लगाने के लिए व्यर्थ है और यह रजिस्ट्री में कहां हो सकता है। यह सभी तरह से एपीआई है। शायद एक वास्तविक कार्य हो सकता है जो पोस्टर पूरा करना चाहता था, लेकिन यह काम को अनइंस्टॉल करने के सवाल से मुखौटा है।

+0

निश्चित रूप से सहमत है - एमएसआई डेटाबेस विवरणों को सीधे एक्सेस करने के लिए कभी भी स्वीकार्य नहीं है, या यहां तक ​​कि बस इसे डीकोड करने का प्रयास करने के लिए भी बहुत से लोग रजिस्ट्री में जो सामान ढूंढते हैं, उसके साथ ऐसा करने लगते हैं। –

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