2013-06-21 7 views
17

example here के बाद, मैंने ProgramMenuFolder के लिए एक शॉर्टकट जोड़ा जो मेरा एप्लिकेशन लॉन्च करता है। (मेरे कोड क्योंकि मैं अतिरिक्त फ़ोल्डर की जरूरत नहीं है वास्तव में सरल है।)(वाईएक्स) प्रोग्राम फाइल शॉर्टकट प्रति मशीन इंस्टॉल

<DirectoryRef Id='ProgramMenuFolder'> 
    <Component Id='cmpStartMenuShortcut' 
      Guid='MY GUID HERE'> 
    <Shortcut Id='StartMenuShortcut' 
       Name='$(var.ProductName)' 
       Icon='MainIcon.ico' 
       Description='$(var.ProductName)' 
       Target='[ClientDir]myapp.exe' 
       WorkingDirectory='ClientDir'/> 
    <RegistryValue Action='write' Type='integer' Root='HKCU' 
        Key='Software\Company\Product Name' 
        Name='installed' Value='1' KeyPath='yes'/> 
    </Component> 
</DirectoryRef> 

चूंकि मेरे स्थापना (ALLUSERS = 1, पैकेज/@ InstallPrivileges =, और @ InstallScope = '' बुलंद 'प्रति मशीन है perMachine ') ProgramMenuFolder मशीन पर सभी उपयोगकर्ताओं के लिए फ़ोल्डर है।

मेरा प्रश्न रजिस्ट्री मान के साथ करना है। मेरी समझ यह है कि शॉर्टकट वाले घटक के लिए एक कीपैथ प्रदान करने के लिए बस इसकी आवश्यकता है। नमूना HKCU का उपयोग करता है, जो एक प्रति उपयोगकर्ता स्थान है।

क्या प्रति-मशीन घटक के लिए प्रति-उपयोगकर्ता मान के रूप में प्रति-उपयोगकर्ता मान का उपयोग करना गलती नहीं है?

यदि किसी मशीन में दो व्यवस्थापक हैं, और व्यवस्थापक # 1 उत्पाद इंस्टॉल करता है, और व्यवस्थापक # 2 मरम्मत का प्रयास करता है, तो Windows इंस्टालर रजिस्ट्री मान नहीं देखेगा और लगता है कि शॉर्टकट गुम है और यह इंस्टॉल करेगा डुप्लिकेट, है ना?

तो मैं HKLM के लिए बदल रहा RegistryValue/@ रूट की कोशिश की, लेकिन तब WiX शिकायत:

त्रुटि LGHT0204: ICE38: घटक cmpStartMenuShortcut उपयोगकर्ता प्रोफ़ाइल पर स्थापित करता है। यह [एसआईसी] कीपैथ रजिस्ट्री कुंजी एचकेसीयू के तहत आनी चाहिए।

त्रुटि LGHT0204: ICE43: घटक cmpStartMenuShortcut में गैर-विज्ञापित शॉर्टकट हैं। यह [एसआईसी] कीपैथ रजिस्ट्री कुंजी एचकेसीयू के तहत आनी चाहिए।

त्रुटि LGHT0204: ICE57: घटक 'cmpStartMenuShortcut' में प्रति-मशीन कीपैथ के साथ प्रति उपयोगकर्ता और प्रति-मशीन डेटा दोनों हैं।

मुझे समझ में नहीं आता कि कुंजी HKCU के तहत क्यों होनी चाहिए।

उत्तर

11

शॉर्टकट की वह शैली उस लक्ष्य के लिए है जो अब स्थापित नहीं हो सकती है और न ही उस समय इसे लागू किया जा सकता है। यह क्लासिक .lnk शॉर्टकट फ़ाइल बनाता है। यह शॉर्टकट्स को लक्षित करने के लिए उपयोगी है कि आपका इंस्टॉलर ज़िम्मेदार नहीं है लेकिन आपके उत्पाद के उपयोगकर्ताओं के लिए उपयोगी हो सकता है (उदा। Cmd.exe)।

वैकल्पिक रूप से, लक्ष्य को अनदेखा करते समय लक्षित या विज्ञापन के लिए एक शॉर्टकट अनइंस्टॉल किया जाएगा (उत्पाद अनइंस्टॉल किया गया है)। उदाहरण के लिए, वाईएक्स wix.chm को वाईएक्स दस्तावेज़ीकरण नामक शॉर्टकट इंस्टॉल करता है। विज्ञापित शॉर्टकट के शॉर्टकट तत्व को फ़ाइल तत्व का बच्चा बनाया जा सकता है।

यहाँ एक हाथ से लिखा उदाहरण है:

<Component Id="ProductComponent"> 
    <File Source="$(var.ConsoleApplication1.TargetPath)" KeyPath="yes"> 
    <Shortcut Id="$(var.ConsoleApplication1.TargetName)Shortcut" 
       Name="$(var.ConsoleApplication1.TargetName)" 
       Advertise="yes" 
       Description="Starts $(var.ConsoleApplication1.TargetName)" 
       Directory="ProgramMenuFolder" /> 
    </File> 
</Component> 

गर्मी के उत्पादन में शॉर्टकट तत्व सम्मिलित करने के लिए, यह एक XSL को बदलने के लिए पथ गुजरती हैं। स्निपेट:

<xsl:template match="wix:File[contains(@Source,'\myapp.exe')]"> 
    <xsl:copy-of select="." /> 
    <Shortcut Id='StartMenuShortcut' 
      Advertise="yes" 
      Name='$(var.ProductName)' 
      Icon='MainIcon.ico' 
      Description='$(var.ProductName)' 
      WorkingDirectory='ClientDir'/> 
</xsl:template> 
+2

धन्यवाद। यह समाधान मेरे लिए काम कर रहा प्रतीत होता है। मुझे नहीं पता था कि जब मैंने वाईएक्स रोड शुरू किया था तो मुझे एक्सएसएलटी के बारे में जानना होगा। –

+1

आपने वास्तव में उत्तर नहीं दिया है कि एक गैर-विज्ञापित शॉर्टकट एचकेएलएम को 'कीपैथ' क्यों नहीं लिख सकता है, या क्यों गैर-विज्ञापित शॉर्टकट को ** रजिस्ट्री ** 'कीपैथ' की आवश्यकता होती है लेकिन विज्ञापित कोई नहीं करता है। –

0

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

+0

सुझाव के लिए धन्यवाद।दुर्भाग्यवश, फ़ाइल धारण करने वाला घटक गर्मी (और समय-समय पर पुन: उत्पन्न) द्वारा उत्पन्न होता है, इसलिए उस दृष्टिकोण का उपयोग करना व्यावहारिक नहीं है। और मैं वास्तव में समझना चाहता हूं _why_ प्रति मशीन घटक के लिए कीपैथ के रूप में प्रति-मशीन स्थान का उपयोग करने में त्रुटि है। –

+1

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

+0

प्रारंभ मेनू प्रति उपयोगकर्ता और प्रति मशीन तत्वों का एक संकर दृश्य नहीं है? जब मैं अपने इंस्टॉलर प्रति-मशीन चलाता हूं, तो शॉर्टकट सभी उपयोगकर्ताओं \ स्टार्ट मेनू \ प्रोग्राम में \ स्टार्ट मेनू \ प्रोग्राम नहीं जोड़ा जाता है। –

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