2017-09-30 17 views
7

का उपयोग करते समय मान को 0 पर सेट किया गया था जब रजिस्ट्री कुंजी अद्यतन नहीं हो रहा है रजिस्ट्री कुंजी मान को एमएसआई के लिए वाईएक्स टूलसेट द्वारा अपने इच्छित डेटा के साथ अपडेट नहीं किया जा रहा है। यदि के: वी गुम है, तो यह इसे जोड़ता है। यदि के: वी का डेटा 0 पर सेट हो गया है, तो यह पूरी तरह से अनदेखा करता है, जो यहां वास्तविक समस्या है (मुझे लगता है)वाईएक्स टूलसेट

मूल लक्ष्य यह रजिस्ट्री कुंजी मान सत्यापित करने से पहले इच्छित डेटा-मान के साथ मौजूद है, और रीबूट प्रॉम्प्ट ट्रिगर करता है अगर कुंजी को जोड़ा/अपडेट किया जाना था।

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"> 
    <Product Id="*" Name="SampleInstaller" Language="1033" Version="1.0.0.0" Manufacturer="ACME" UpgradeCode="cf6248e9-d7da-4996-9b8e-90072e8510f6"> 
     <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" Platform="x64"/> 
     <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." /> 
     <Feature Id="ProductFeature" Title="SampleInstaller" Level="1"> 
      <ComponentGroupRef Id="ProductComponents" /> 
     </Feature>  
    </Product> 

    <Fragment> 
    <Directory Id="TARGETDIR" Name="SourceDir"> 
     <Directory Id="ProgramFilesFolder64"> 
     <Directory Id="INSTALLFOLDER" Name="SampleInstaller" /> 
     </Directory> 
    </Directory> 
    <Property Id="VKB_QUERY_HKCU" Secure="yes"> 
     <RegistrySearch Id="VkbVisibleHkcu" 
      Win64="yes" 
      Type="raw" 
      Root="HKCU" 
      Key="Software\Microsoft\TabletTip\1.7" 
      Name="TipbandDesiredVisibility"/> 
    </Property> 
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER"> 
     <Component Id="ShowVKB_Registry_HKCU" Guid="{97AB4B1D-C9C8-4B34-9328-FF8CA3ED8992}" Directory="INSTALLFOLDER"> 
     <RegistryKey Id="VKB_Registry_Key_HKCU" Root="HKCU" Key="Software\Microsoft\TabletTip\1.7" ForceCreateOnInstall="yes" ForceDeleteOnUninstall="no"> 
      <RegistryValue Id="VKB_Registry_Value_HKCU" Action="write" Type="integer" Name="TipbandDesiredVisibility" Value="1"/> 
     </RegistryKey> 
     </Component> 
    </ComponentGroup> 
    <InstallExecuteSequence> 
     <ScheduleReboot After="InstallFinalize">NOT (VKB_QUERY_HKCU = "#1")</ScheduleReboot> 
    </InstallExecuteSequence> 
    </Fragment> 
</Wix> 

इसके अलावा, यह MSIEXEC से बाहर निकलने के कोड की तरह लगता है जब $LastExitCode और %errorlevel% जाँच हमेशा 0 बजाय 1641 की 3010 लौटा रहा है। मैंने अलग-अलग रीबूट व्यवहारों से गड़बड़ नहीं की है, लेकिन मैंने सोचा कि रीबूट प्रॉम्प्ट होने से मेरे इंस्टॉलर को शून्य से बाहर निकलने का कारण होगा, इसलिए किसी भी मार्गदर्शन की भी सराहना की जाती है।

उत्तर

0

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

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

तो मूल रूप से यह एक परीक्षण बग/आंतरिक WiX ज्ञान की कमी थी।

तो, हमेशा इसे फिर से चल रहा है जब तक आप विशेष रूप से उन्नयन व्यवहार को गति प्रदान करने की कोशिश कर रहे करने से पहले अपने MSI स्थापना रद्द करें।

मुझे यकीन नहीं है कि मुझे पहले से मौजूद उत्पाद के बारे में कोई त्रुटि क्यों नहीं मिली है। मैंने यह सुनिश्चित करने के लिए सोचा होगा कि डिफ़ॉल्ट व्यवहार होगा।

+1

आपको अपने '' में 'AllowSameVersionUpgrades = "yes" 'निर्दिष्ट करने की आवश्यकता है, यदि आप पुन: संकलन पर अपना संस्करण बदलने के बिना अपग्रेड का परीक्षण करने में सक्षम होना चाहते हैं। इसका उपयोग किए बिना अपग्रेड का परीक्षण करने के लिए आपको संस्करण के पहले 3 हिस्सों में से एक को बदलकर हर नए निर्माण के साथ संस्करण को अपग्रेड करना होगा क्योंकि विंडोज इंस्टालर संस्करण तुलना में चौथे भाग को अनदेखा करता है। –

+1

आप पहले से मौजूद उत्पाद नहीं प्राप्त कर रहे थे क्योंकि आपने ' 'का उपयोग किया था जो निर्दिष्ट करता है कि प्रत्येक ** निर्माण ** आपको एक नया उत्पाद आईडी GUID मिलेगा और अन्य बिल्डों की तुलना में अनिवार्य रूप से अलग होगा बिल्कुल उसी स्रोत के साथ भी। मैं अत्यधिक वीएम पर इंस्टॉलेशन परीक्षण करने का सुझाव दूंगा जहां आप एक ज्ञात 'साफ' स्थिति में आसानी से रोल-बैक कर सकते हैं क्योंकि इंस्टॉलेशन विकसित करते समय आप वास्तव में गड़बड़ कर सकते हैं। –

+0

अच्छा लगता है, @BrianSutherland! मैं निश्चित रूप से उन्हें वीएम पर परीक्षण करने के बारे में देखता हूं। यह मेरे लिए अजीब लगता है कि उत्पाद आईडी विजुअल स्टूडियो एक्सटेंशन के साथ पैक किए गए सेटअप टेम्पलेट्स के साथ उस तरह के व्यवहार के लिए डिफ़ॉल्ट होगी। क्या कोई कारण है कि इसे प्री-जेनरेट किए गए GUID पर लाभ क्यों माना जाता है? –

0

है कि स्थापित करने और साथ एक वर्बोज़ लॉग बनाएँ:

msiexec/मैं [एमएसआई के लिए पथ]/एल * VX [एक पाठ लॉग फ़ाइल के लिए पथ]

और संपत्ति मूल्यों आदि को देखने के सबसे अधिक संभावना कारण है कि आपको 3010 निकास नतीजे नहीं मिल रहे हैं कि शेड्यूलबूट को कंडीशन किया गया है।

मान लीजिए कि सब कुछ अन्यथा इरादे से काम कर रहा है, समस्या यह हो सकती है कि आपको अपनी संपत्ति घोषणा में सुरक्षित करने के लिए हाँ सेट करने की आवश्यकता हो, अन्यथा मूल्य UI अनुक्रम रजिस्ट्री खोज से निष्पादित अनुक्रम में स्थानांतरित नहीं किया जाएगा। यदि लॉग दिखाता है कि इसे इंस्टॉल की शुरुआत में सही मान मिल रहा है लेकिन बाद में इसे खोना यह सबसे अधिक संभावना है।

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

लॉग यह इंगित करता है कि सबकुछ ठीक है। गुणों में वे मान होते हैं जो सही दिखते हैं, और शेड्यूल रीबूट कार्रवाई की जाती है। एकमात्र मुद्दा जो मैं देखता हूं वह यह है कि विंडोज इंस्टालर ने उपयोगकर्ता को रीबूट करने के लिए संवाद नहीं दिखाया, इसलिए यह गैर-इंटरैक्टिव चीज करता है, जो कि कॉलर को बताने के लिए 3010 लौटाता है कि रीबूट की आवश्यकता होती है। वहाँ कोई स्पष्ट कारण Windows इंस्टालर रिबूट (जो क्या ScheduleReboot करता है) के लिए संकेत नहीं था लेकिन अगर स्थापित एक गैर-सहभागी उपयोगकर्ता के संदर्भ में चल रहा है फिर Windows अन्य उपयोगकर्ता के लिए एक डेस्कटॉप संवाद नहीं दिखाया जाएगा (या कोई कर रहे हैं उपयोगकर्ता को लॉग ऑन नहीं किया गया है)।

+0

उह ... मैं अब और भी उलझन में हूं। मुझे यह मेरे लॉग में मिल रहा है: 'संपत्ति परिवर्तन: VKB_QUERY_HKCU प्रॉपर्टी को संशोधित करना। इसका वर्तमान मूल्य 'सुरक्षित = "हां" है। इसका नया मान: '# 1'। मैंने दस्तावेज से जो कुछ समझा है, उसके आधार पर मैंने प्रश्नों को अपडेट किया है, जहां मैंने मूल्य निर्धारित किए हैं। मेरा लॉग आउटपुट: https://gist.github.com/the-nose-knows/61859eda8719425dee90eaed564d9c64 –

+0

इसके अलावा, लॉग मुख्य इंजन थ्रेड के बाहर निकलने के रूप में '3010' दिखा रहा है लेकिन एमएसआईएक्सईसी अभी भी' 0' त्रुटि को जांचते समय '0' वापस कर रहा है % '/' $ LastExitCode' –