2012-11-22 27 views
12

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

अनइंस्टॉल करने पर, स्वयं निर्मित कुंजी को भी हटाया जाना चाहिए। ऐसा लगता है कि इन चाबियों को हटाना इतना आसान नहीं है। मैं आईसीई 57 और/या आईसीई 38 के साथ "लड़ रहा हूं"। दोनों perUser और perMachine डेटा के बीच मिश्रण की शिकायत करते हैं।

उम्मीद है कि आप मुझे इस मुद्दे को ठीक करने के लिए सही दिशा में इंगित कर सकते हैं।

उत्तर

9

बर्फ काबू पाने के लिए आप प्रति उपयोगकर्ता रजिस्ट्री बढ़ना चाहिए घटकों को अलग करने और उस घटक के लिए मुख्यपथ के रुप में कुछ रजिस्ट्री प्रविष्टि का उपयोग करने के लिए, अर्थात्:

<Component Id='PerUserRegistry' Guid='*'> 
    <RegistryValue Id="PerUserRegistry_KeyPAth" KeyPath="yes" Root="HKCU" Key="Software\[Manufacturer]\[ProductName]\[ProductCode]\PerUserRegistry" Name="[PackageCode]" Value="[ProductVersion]" Type="string" /> 
    <!--Other Per-user registry goes here--> 
</Component> 

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

<Component Id='ActiveSetup' Guid='*'> 
    <RegistryValue Id="ActiveSetup00" Root="HKLM" KeyPath="yes" Key="SOFTWARE\SOFTWARE\Microsoft\Active Setup\Installed Components\[PackageCode]\" Name="StubPath" Value="msiexec /fup [ProductCode] /qb-!" Type="string" /> 
    <RegistryValue Id="ActiveSetup01" Root="HKLM" Key="SOFTWARE\SOFTWARE\Microsoft\Active Setup\Installed Components\[PackageCode]\" Value="[ProductName] [ProductVerion] Configuration" Type="string" /> 
</Component> 
<Component Id='PerUserRegistryCleanup' Guid='*'> 
    <RegistryValue Id="PerUserRegistry_KeyPath" Root="HKCU" KeyPath="yes" Key="SOFTWARE\SOFTWARE\Microsoft\Active Setup\Installed Components\[PackageCode]\" Name="StubPath" Value="msiexec /fup [ProductCode] /qb-!" Type="string" /> 
    <RemoveRegistryKey Id='PerUserRegCleanup' Root='HKCU' Action='removeOnInstall' Key='Key\To\Be\Removed'/> 
</Component> 

नोट: [PackageCode] उपयोग

सबसे पहले मैं आप पर उन्हें हटाने के लिए स्थापित करें या स्थापना रद्द करें, तो आप सिर्फ इस WiX कोड के साथ RemoveRegirty प्रवेश और सक्रिय सेटअप, यानी जोड़ने की जरूरत के बजाय फिर से स्थापित प्रस्ताव ActiveSetup में बहुत अनुशंसा की जाती है, इसलिए एमएसआई पैकेज के प्रत्येक नए संस्करण (निर्माण) के साथ आप अलग प्रविष्टि जोड़ते हैं (मेरा अंतिम नोट भी देखें)। मैंने प्रयोजन पर कुंजी-पथ के रूप में प्रति-उपयोगकर्ता सक्रिय सेटअप रजिस्ट्री का उपयोग किया, इसलिए आप इसे वर्तमान उपयोगकर्ता के लिए दो बार नहीं चलाते हैं।

अनइंस्टॉल करने के बाद उन्हें हटाने के लिए, अब, उम्मीद है कि आपको पूरी कुंजी को हटाने की आवश्यकता है, न केवल कुछ मान। किसी भी मामले में, मैं अनइंस्टॉल करते समय सक्रिय सेटअप के लिए रजिस्ट्री प्रविष्टि जोड़ने के लिए कस्टम कार्रवाई करूँगा (या यदि ऐसी कई कुंजियां/मान हैं, तो उन लोगों के साथ सीएमडी फ़ाइल बनाएं और तैनात करें और इसे हटाने के लिए इसे निकालें, RemoveFiles एक्शन से पहले, सभी को जोड़ने के लिए उनमें से रजिस्ट्री के लिए)।

नोट: कि मैं स्थापित होने के दौरान इस रजिस्ट्री को हटाने में दृढ़ता से अनुशंसा करता हूं, या सॉफ़्टवेयर अभी स्थापित होने पर आप प्रति उपयोगकर्ता मानों को हटा सकते हैं।

<CustomAction Id="CA_UninstallRegistryCleanUp" Directory="SystemFolder" ExeCommand="REG.exe ADD &quot;HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components\MySoftName_CleanUp&quot; /v StubPath /d &quot;reg add ^&quot;HKCU\Key\To\Be\Removed^&quot; /va /f&quot; /f" Return="ignore" /> 
<InstallExecuteSequence> 
    <Custom Action='CA_UninstallRegistryCleanUp' After='RemoveRegistryValues'>REMOVE~="ALL"</Custom> 
</InstallExecuteSequence> 

<Component Id='RegCleanup_Remover' Guid='*'> 
    <RegistryValue Id="PerUserRegistry_KeyPAth" Root="HKLM" KeyPath="yes" Key="SOFTWARE\[Manufacturer]\[ProductName]\[ProductCode]\" Name="DummyKey" Value="[ProductVersion]" Type="string" /> 
    <RemoveRegistryKey Id='RegCleanup_Remover' Root='HKLM' Action='removeOnInstall' Key='SOFTWARE\Microsoft\Active Setup\Installed Components\MySoftName_CleanUp'/> 
</Component> 

अंतिम नोट: बस दो यह सब सक्रिय सेटअप सामान के साथ छोटे मुद्दों:

तो यहाँ यह सब के लिए WiX कोड है विंडोज टर्मिनल सर्वर पर सावधान रहना होगा; और एक बार सक्रिय सेटअप एक उपयोगकर्ता के लिए वर्तमान .MSI के लिए चलाया गया था, यदि आप उसी पैकेज को पुनर्स्थापित करने का निर्णय लेते हैं, तो यह फिर से नहीं चलाएगा, जब तक कि आप अपना पैकेजकॉन्डे बदल नहीं सकते या ActiveSetup रजिस्ट्री कुंजी के तहत संस्करण नहीं बढ़ाते। ये किसी अन्य दिन के लिए विषय हैं, अगर उन्हें स्पष्ट करने की आवश्यकता हो तो मुझे बताएं।

और उपरोक्त सभी घटक को कुछ फ़ीचर में जोड़ना न भूलें।

1

विंडोज इंस्टालर इस उपयोगकर्ता डेटा को मानता है और सर्वोत्तम अभ्यास इसे हटाने के लिए नहीं है। किसी भी तरह से, इसे किसी भी तरह से हटाने की कोशिश करना बहुत मुश्किल है क्योंकि अन्य उपयोगकर्ता प्रोफाइल दायरे/संदर्भ से बाहर हैं। यह सैद्धांतिक रूप से प्रोफाइल और लोड रजिस्ट्री हाइव्स को लोड करने के लिए एक कस्टम कार्रवाई लिखना संभव है लेकिन विंडोज़ (Vista) के कुछ संस्करणों पर जो विंडोज इंस्टालर सेवा को दी गई प्रतिबंधित अनुमतियों के कारण काम नहीं करेगा।

आप सच में, सच स्थापना रद्द करें पर कस्टम क्रिया डेटा निकालने के लिए सक्षम होना चाहिए तो पर एक नज़र डालें:

Active Setup Explained

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

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

लेकिन ईमानदारी से, एक बेहतर डिजाइन किए गए एप्लिकेशन को इन सभी की आवश्यकता नहीं होगी।

+0

रजिस्ट्री कुंजी एक्सप्लोरर के संदर्भ मेनू को विस्तारित करती है। इसे हटाने के लिए, परिणाम मेनू छोड़ दिया जाएगा। –

+0

प्रति उपयोगकर्ता के बजाय प्रति उपयोगकर्ता क्यों बढ़ाया गया था? –

+0

हैक –