2012-07-04 10 views
5

मेरे पास एक उत्पाद है जो एक एमएसआई के रूप में पैक किया गया है। जब मेरे ग्राहक मौजूदा संस्करण के शीर्ष पर मेरे उत्पाद का एक नया संस्करण स्थापित करते हैं तो यह कस्टम वीबीएस एक्शन की वजह से अच्छी तरह से काम नहीं कर रहा है, जैसा कि नीचे बताया गया है। मेरा सवाल है: मैं अपने एमएसआई को कैसे बदल सकता हूं ताकि शीर्ष पर स्थापित करने से पहले किसी भी मौजूदा संस्करण की पूरी तरह से अनइंस्टॉल हो जाए?एमएसआई इंस्टॉल के हिस्से के रूप में पिछले संस्करण को अनइंस्टॉल कैसे करें?

विस्तार है:

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

एमएसआई इंस्टॉल कुछ फ़ाइलों को [CommonApplicationData] \ MyApp फ़ोल्डर में बनाता है और लिखता है। निष्पादन के दौरान एप्लिकेशन [CommonApplicationData] \ MyApp फ़ोल्डर में और फ़ाइलें बनाता है। अनइंस्टॉल करने के दौरान मुझे इन सभी फ़ाइलों को हटाना होगा। चूंकि वे एमएसआई द्वारा स्थापित नहीं हैं, इसलिए वे स्वचालित रूप से अनइंस्टॉल नहीं किए जाते हैं, इसलिए मैंने एक vbs स्क्रिप्ट बनाई है जो उस फ़ोल्डर और इसमें कुछ भी हटा देती है।

... 
RemoveFiles 
RemoveFolders 
CreateFolders 
MoveFiles 
InstallFiles 
PatchFiles 
If REMOVE="ALL" Then 
    REM line below is my custom script 
    call VBScript From Installation (MyApp_UninstallCleanup) 
End 
DuplicateFiles 
BindImage 
CreateShortcuts 
... 

अब तक तो अच्छा है और यह ठीक काम करता है जब &: अनइंस्टॉल स्थापित करने: मैं ExecuteDeferred में है कि vbs निष्पादित करने के लिए एक कमांड डाल दिया। हालांकि, अगर मैं किसी मौजूदा संस्करण के शीर्ष पर अपने उत्पाद का एक नया संस्करण स्थापित करता हूं तो ऐसा लगता है कि चीजें इस क्रम में होती हैं: ए) नया संस्करण स्थापित करें, [CommonApplicationData] \ MyApp फ़ोल्डर में और [प्रोग्राम फ़ाइलें] में विभिन्न फ़ाइलें बनाएं \ MyApp ..., पुराने संस्करण की फ़ाइलों को ओवरराइट करना b) मेरे vbs चलाएं, [CommonApplicationData] \ MyApp फ़ोल्डर

मेरे पास मेरे नए एमएसआई में अपग्रेड तालिका में सूचीबद्ध पुराने संस्करणों के लिए GUID है, और इस कस्टम स्क्रिप्ट के अलावा अपग्रेड प्रक्रिया ठीक काम करती प्रतीत होती है।

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

क्या कोई तरीका है कि मैं अपना नया एमएसआई बदल सकता हूं ताकि यह पहले पिछले संस्करणों को अनइंस्टॉल कर सके?

विशेष रूप से, मेरे पास ऐसी कई कंपनियां हैं जिनके पास एमएसआई का मौजूदा संस्करण स्थापित है जिसमें कस्टम vbs शामिल है। तो समाधान वास्तव में एक होना चाहिए जो मौजूदा स्थापित एमएसआई से निपट सकता है।

मैंने एमएसआई बनाने के लिए बुद्धिमान स्थापना एक्सप्रेस 7.0 का उपयोग किया है।

धन्यवाद !!

(पोस्ट की गई here)

उत्तर

5

अनुसूची InstallInitialize कार्रवाई से पहले RemoveExistingProducts कार्रवाई:

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

1

सिमेंटेक मंचों

आप अपने इंस्टॉल के लिए मानक समझदार टेम्पलेट का उपयोग किया है पर उत्तर from EdT, तो RemoveExistingProducts क्रिया InstallExecute अनुक्रम के अंत में अनुक्रम है। यद्यपि तकनीकी रूप से यह सबसे अधिक "कुशल" प्लेसमेंट है, जब तक कि पुराने को अपग्रेड करने के लिए अपना नया पैकेज बनाते समय आपने बहुत सावधानी से अपग्रेड सिंक को चलाया है, अंत परिणाम आमतौर पर गायब फ़ाइलों या अन्य aberrations में से एक है।

फिक्स को RemoveExistingProducts क्रिया को पुन: आवश्यकता है ताकि यह InstallValidate और InstallInitialize के बीच चल सके। यह सुनिश्चित करता है कि नए संस्करण को स्थापित करने से पहले पुराना ऐप पूरी तरह से हटा दिया गया हो।

इस क्रिया को स्थितिबद्ध करने के विकल्पों के बारे में अधिक विस्तृत स्पष्टीकरण के लिए सहायता फ़ाइल MSI.CHM में "RemoveExistingProducts" को देखो।

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