2012-10-12 28 views
6

के लिए त्रुटि मैं प्रति-मशीन और x64 आर्किटेक्चर केवल सेटिंग के साथ वाईएक्स 3.6 में एक विंडोज इंस्टालर स्क्रिप्ट लिखने की कोशिश कर रहा हूं।"ICE38: घटक उपयोगकर्ता प्रोफ़ाइल में स्थापित करता है" एक विशिष्ट घटक

<Directory Id="ProgramFiles64Folder" Name="PFiles"> 
    <Directory Id="APPLICATIONFOLDER" Name="My Company"> 
     <Directory Id="ProductFolder" Name="My Product"> 
     <Component Id="MainComponent" Guid="" Win64="yes" KeyPath="yes"> 
      ... 
     </Component> 
     <Directory Id="DataFolder" Name="Data"> 
      <Directory Id="Machine" Name="Machine" > 
      <Directory Id="MachinesFolder" Name="Machines"> 
       <Component Id="Machine1" Guid="{74341536-72DF-48C3-95E8-2851D9FA8318}" Win64="yes" KeyPath="yes"> 
         ... 
       </Component> 
      </Directory> 
      <Directory Id="TemplateFolder" Name="Template"> 
       <Component Id="TemplateFiles" Guid="{A0D0C225-D604-4B84-971D-41687A30EC36}" Win64="yes" KeyPath="yes"> 
       <File Id="Template1.rsbak" Source="$(var.SolutionDir)bin\Release\File1.rsbak" /> 
          ... 
       </Component> 
      </Directory> 
      </Directory> 
     </Directory> 
     </Directory> 
    </Directory> 
</Directory> 

समस्या मैं TemplateFiles घटक के लिए त्रुटि ICE38: Component TemplateFiles installs to user profile. It must use a registry key under HKCU as its KeyPath, not a file प्राप्त कि जब मैं संकलन है: मैं निम्नलिखित परियोजना संरचना (छोटा) है। मुझे क्या भ्रमित करता है कि मैं एक और प्रोजेक्ट (काम कर रहा) में एक समान संरचना का उपयोग करता हूं, और मेरे प्रोजेक्ट में सटीक उसी सेटअप के साथ कई घटक हैं (ऊपर दिखाया नहीं गया है)। यह क्यों - और यह केवल घटक - उपयोगकर्ता फ़ाइलों को स्थापित करने पर जोर देता है जब सभी अन्य प्रोग्राम फ़ाइलों के लिए सही ढंग से स्थापित होते हैं?

उत्तर

5

ऐसा लगता है कि Program Files और Users\UserName\Documents फ़ोल्डरों के बीच महत्वपूर्ण अंतर है। पिछले अपने उदाहरण में संदर्भित है:

<Directory Id="DataFolder" Name="Data"> 

मैं इसी तरह की समस्या के लिए आया था और ब्लॉग पोस्ट में एक जवाब मिला - http://robmensching.com/blog/posts/2007/4/27/How-to-create-an-uninstall-shortcut-and-pass-all-the

संक्षेप में आप Component को subelement रूप HKCU जड़ पर RegistryKey परिभाषित करने की जरूरत है और RemoveFolder तत्व Directory पर उपखंड के रूप में जोड़ें। पूर्ण उदाहरण के लिए उपरोक्त लिंक देखें। इसके अलावा:

  • Component तत्व
  • RemoveFolder से निकालें KeyPath विशेषता संभवतः सभी फ़ोल्डर के लिए परिभाषित किया जाना है। मैंने उस
+0

धन्यवाद के लिए अंदर कोई फ़ाइल के साथ डमी घटक का उपयोग किया। यद्यपि मेरी समस्या ने स्वयं को हल किया (!?) जब हमें अपने फ़ोल्डर्स को दोबारा बनाने के लिए मजबूर होना पड़ा, तो मेरा मानना ​​है कि आपका जवाब यह करने का सही तरीका है। –

+0

खुशी। मुझे खुद ही यही समस्या थी। तो अगले लोगों के लिए एक समाधान जोड़ा जो यह होगा। –