मेरे पास सिस्टम है जो इंटरनेट के माध्यम से कई एमएसआई उत्पादों को स्थापित करता है और मेरे पास एक स्थिति है - परीक्षक उत्पाद के साथ फ़ोल्डर हटाएं, लेकिन रजिस्ट्री कुंजी नहीं और मेरा सिस्टम देखता है कि उत्पाद रजिस्ट्री के माध्यम से मौजूद है और यह इसे अपग्रेड करने का प्रयास करता है, लेकिन उत्पाद वास्तव में नहीं था मौजूद।

क्या कोई एमएसआई फ़ंक्शन है जो मुझे मूक मोड में उत्पाद की स्थिति निर्धारित करने में मदद करता है और यदि उपयोगकर्ता फ़ाइलों को हटा देता है - पूरे उत्पाद की स्थापना रद्द करें?

4
se_pavel 8 अगस्त 2011, 13:24
वर्तमान समाधान - चेक मुख्य फाइल उपलब्ध है। रजिस्ट्री में संग्रहीत और MSI द्वारा हटाई गई मुख्य फ़ाइल का पथ
 – 
se_pavel
8 अगस्त 2011, 14:49
1
पूरी तरह से सुनिश्चित नहीं है कि आप यहां क्या पूछ रहे हैं। मुझे लगता है कि आप जो सुझाव दे रहे हैं वह यह है कि यदि उत्पाद की एप्लिकेशन फाइलें सिस्टम से हटा दी गई हैं तो आप मरम्मत मोड के बजाय अनइंस्टॉलेशन में एमएसआई लॉन्च करना चाहते हैं। मेरा सुझाव है कि आप घटक का कीपथ प्राप्त करने के लिए MsiGetComponentPath() फ़ंक्शन का उपयोग करें, और फिर जांचें कि क्या वह फ़ाइल मौजूद है। यदि फ़ाइल गुम है तो आप उत्पाद को अपग्रेड करने के बजाय निकालने के लिए API का उपयोग करते हैं।
 – 
Stephen Connolly
8 सितंबर 2011, 01:51

1 उत्तर

सबसे बढ़िया उत्तर

अगर आपको यह जांचना है कि उत्पाद अभी भी विंडोज इंस्टालर के साथ पंजीकृत है या नहीं - अपने पैकेज के उत्पाद कोड को पैक किए गए गाइड प्रारूप में परिवर्तित करें (उदाहरण के लिए http://www.dwarfsoft.com/blog/2010/06/22/msi-package-code-fun/) और HKCR\Installer\Products में इसकी उपस्थिति की खोज करें।

विंडोज इंस्टालर डेटाबेस से उत्पाद को वास्तव में हटाने के लिए - सबसे आसान तरीका है MsiZap का उपयोग http://msdn.microsoft.com/en-us/library/windows/desktop/aa370523(v=vs.85).aspx

1
imagi 31 अक्टूबर 2011, 00:14
Msizap ने वही किया जो मुझे चाहिए, लेकिन यह वितरण योग्य नहीं है
 – 
se_pavel
15 फरवरी 2012, 22:01