2015-09-30 6 views
9

मैं सीखने की प्रक्रिया में हूं कि कैसे एक कस्टम प्रबंधित बूटस्ट्रैपर को विक्स-बर्न के लिए विकसित करना है। मेरे ज्ञान के अनुसार कोई आधिकारिक ट्यूटोरियल नहीं है, अनौपचारिक ट्यूटोरियल हमेशा डब्ल्यूपीएफ सामान से भरे हुए हैं, जिनमें मुझे कोई दिलचस्पी नहीं है और फ़ोरम पर अधिकांश लोग यह कहने से कहीं अधिक नहीं करते हैं कि आपको बूटस्ट्रैपर एप्लिकेशन से विरासत में एक वर्ग बनाना होगा और ओवरराइड करना होगा रन() विधि।एक विकृत विक्स-बर्न पैकेज मैन्युअल रूप से कैसे शुद्ध करें?

मैंने ऐसा किया, कॉन्फ़िगरेशन फ़ाइल बनाई, xml मार्कअप में पेलोड जोड़ा। परिणामी इंस्टॉलर ने कुछ भी नहीं किया, वास्तव में यह हमेशा के लिए भाग गया, केवल इसे मारने से इसे रोक दिया। मैं ईमानदारी से उम्मीद करता हूं कि कॉलिंग बेस। रुन() मुझे कुछ बुनियादी डिफ़ॉल्ट जीयूआई-कम व्यवहार देगा। लेकिन यह केवल एक अमूर्त विधि है। आखिरकार मैंने सीखा कि मुझे कुछ इंजन करने के लिए कुछ इंजन.फंक्शन() को कॉल करना होगा। इसलिए मैं परीक्षण करने के लिए यह लिखा:

protected override void Run() 
{ 
    Engine.Detect(); 
    Engine.Plan(LaunchAction.Install); 
    Engine.Apply(IntPtr.Zero); 
    Engine.Quit(0); 
} 

मैं सफलतापूर्वक एक पैकेज है कि वास्तव में स्थापित संकलित, समस्या यह है कि इसकी स्थापना रद्द नहीं किया जा सकता है। मेरा सवाल है, मैं इसे अपने सिस्टम से शुद्ध करने के लिए क्या कर सकता हूं? मुझे किस रजिस्ट्री कुंजियों को मिटाना चाहिए, मुझे कैश किए गए पैकेजों को किस प्रकार हटाना चाहिए, और इससे छुटकारा पाने के लिए मुझे और क्या करना चाहिए?

उत्तर

1

पहले, रजिस्ट्री कुंजी नीचे सूचीबद्ध दो स्थानों में से एक में हो जाएगा - और ऐसा शायद इसलिए है 64-बिट ओएस पर 32-बिट अनुप्रयोगों के लिए दूसरा दूसरा है।

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
  • HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninst‌​all

दूसरे, आप निर्धारित करने के लिए जहां निष्पादन योग्य स्थापना रद्द करें, जो शायद उस C:\ProgramData\Package Cache की तरह दिखता है एक फ़ोल्डर में है के लिए कैश किया गया है रजिस्ट्री कुंजी का उपयोग कर सकते हैं।

यदि यह एक .msi स्थापना थी, तो एक और रजिस्ट्री कुंजी है और फ़ाइल here के अनुसार एक अलग स्थान पर कैश की गई है।

अन्य लिंक:

0

उर्फ, आप अपने आप को नरक में ले गए हैं। :) जितना मैं कर सकता हूं मैं आपकी मदद करूंगा।

आपने उस पैकेज को कैसे इंस्टॉल किया?

DLLs जो आपको दिलचस्प लग सकते हैं:

  • BootstrapperCore.dll (WiX SDK के साथ शामिल है)
  • Microsoft.Deployment.WindowsInstaller.dll (WiX SDK के साथ शामिल है)
  • WindowsBase.dll (थ्रेडिंग के लिए)

और, एक्सएमएल फाइलों में से एक ऐसा होना चाहिए, ताकि आप देख सकें कि वास्तव में क्या है।

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension" xmlns:bal="http://schemas.microsoft.com/wix/BalExtension"> 
    <Bundle Name="My Test Application" Version="1.0.0.0" Manufacturer="Bryan" UpgradeCode="PUT-GUID-HERE"> 
    <BootstrapperApplicationRef Id="ManagedBootstrapperApplicationHost"> 
     <Payload SourceFile="..\TestBA\BootstrapperCore.config"/> 
     <Payload SourceFile="..\TestBA\bin\Release\TestBA.dll"/> 
     <Payload SourceFile="..\TestBA\bin\Release\GalaSoft.MvvmLight.WPF4.dll"/> 
     <Payload SourceFile="C:\Program Files\WiX Toolset v3.6\SDK\Microsoft.Deployment.WindowsInstaller.dll"/> 
    </BootstrapperApplicationRef> 
    <Chain> 
     <PackageGroupRef Id='Netfx4Full' /> 
     <MsiPackage SourceFile="..\DummyInstaller\bin\Release\DummyInstaller.msi" Id="DummyInstallationPackageId" Cache="yes" Visible="no"/> 
    </Chain> 
    </Bundle> 
    <Fragment> 
    <!-- Managed bootstrapper requires .NET as a dependency, since it was written in .NET. 
     WiX provides a Bootstrapper for the bootstrapper. The fragment below includes .NET. 
     For more information or examples see Heath Stewart's blog or the WiX source: 
     http://blogs.msdn.com/b/heaths/archive/2011/10/28/introducing-managed-bootstrapper-applications.aspx 
     --> 
    <WixVariable Id="WixMbaPrereqPackageId" Value="Netfx4Full" /> 
    <WixVariable Id="WixMbaPrereqLicenseUrl" Value="NetfxLicense.rtf" /> 
    <util:RegistrySearch Root="HKLM" Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full" Value="Version" Variable="Netfx4FullVersion" /> 
    <util:RegistrySearch Root="HKLM" Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full" Value="Version" Variable="Netfx4x64FullVersion" Win64="yes" /> 
    <PackageGroup Id="Netfx4Full"> 
     <ExePackage Id="Netfx4Full" Cache="no" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="yes" 
        SourceFile="C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\DotNetFX40\dotNetFx40_Full_x86_x64.exe" 
        DownloadUrl="http://go.microsoft.com/fwlink/?LinkId=164193" 
        DetectCondition="Netfx4FullVersion AND (NOT VersionNT64 OR Netfx4x64FullVersion)" /> 
    </PackageGroup> 
    </Fragment> 
</Wix> 

नोट: अपने रजिस्ट्री खोज और शर्तों से थोड़ा अलग क्या NETFX पता लगाने के लिए WiX टूलसेट में प्रयोग किया जाता है। निम्नलिखित NETFX के लिए का पता लगाने है WiX टूलसेट उपयोग करता है:

<util:RegistrySearch 
    Id="NETFRAMEWORK40" 
    Variable="NETFRAMEWORK40" 
    Root="HKLM" 
    Key="SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" 
    Value="Install" 
    Result="value" /> 

अगला समाधान हो सकता है:

<Bundle> 
    <Chain> 
     <PackageGroupRef Id="NetFx452" />   
     <MsiPackage ... /> 
    </Chain> 
</Bundle> 

डाउनलोड माइक्रोसॉफ्ट:

अपने चेन में एक PackageGroupRef तत्व को शामिल करें .NET Framework 4.5.2 (ऑफ़लाइन इंस्टॉलर), और इसे अपने बूटस्ट्रैपर प्रोजेक्ट में जोड़ें। (मैं इसे एक फ़ोल्डर "संसाधन" कहा जाता है में डाल दिया।)

निम्नलिखित टुकड़ा जोड़ें:

<Fragment> 
    <util:RegistrySearchRef Id="NETFRAMEWORK45"/> 
    <PackageGroup Id="NetFx452"> 
     <ExePackage Id="NetFx452" 
        Cache="no" 
        Compressed="yes" 
        PerMachine="yes" 
        Permanent="yes" 
        Vital="yes" 
        Name="NDP452-KB2901907-x86-x64-AllOS-ENU.exe" 
        SourceFile="Resource\NDP452-KB2901907-x86-x64-AllOS-ENU.exe" 
        DetectCondition="NETFRAMEWORK45" 
        InstallCommand="/q /norestart" />  
    </PackageGroup> 
</Fragment> 
+0

मैं तुम्हारी मदद की सराहना करते हैं, लेकिन यह वास्तव में मेरे सवाल – Alex

+0

का उत्तर नहीं है मैं था तो वही समस्या मैं अपने समाधान का प्रतिनिधित्व करने की कोशिश की । श्रीमान कि यह सहायक नहीं था। –

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