2012-10-12 12 views
6

Yalnızca bir makine ve x64 mimarisi ayarıyla WiX 3.6'da bir Windows Installer komut dosyası yazmaya çalışıyorum."ICE38: Bileşen, kullanıcı profili yüklüyor" hatası belirli bir bileşen için hata

<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> 

Sorun derleme zaman TemplateFiles bileşeni için hata ICE38: Component TemplateFiles installs to user profile. It must use a registry key under HKCU as its KeyPath, not a file alınıyor olmasıdır: Aşağıdaki proje yapısı (kısaltılır) sahiptir. Beni şaşırtan şey ise, başka bir projede (çalışma) benzer bir yapı kullandığım ve projemde (aynı zamanda yukarıda gösterilmemiştir) tam olarak aynı kurulumla birkaç bileşenin bulunmasıdır. Neden bu - ve bu sadece - bileşen, diğerlerinin doğru şekilde kurulduğunda, kullanıcı dosyalarını Program Dosyalarına yüklemede ısrar ediyor?

cevap

5

msi için Program Files ve Users\UserName\Documents klasörler arasında önemli bir fark var gibi görünüyor. Geçen senin Örneğin başvurulmaktadır:

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

Ben benzer bir sorun geldi ve blog yayınında cevabını buldum - http://robmensching.com/blog/posts/2007/4/27/How-to-create-an-uninstall-shortcut-and-pass-all-the

Eğer Component için alt öğesi olarak HKCU kökü üzerinde RegistryKey tanımlamanız gerekir Kısacası

ve öğesinin alt öğesi olarak RemoveFolder öğesini ekleyin. Tam örnek için yukarıdaki bağlantıya bakın. Bunlara ek olarak:

  • Kaldır KeyPath nitelik
  • RemoveFolder eleman
  • Component olasılıkla tüm klasörler için tanımlanması gerekir. İçinde hiçbir dosya bulunmayan kukla bileşen kullandım.
+0

Teşekkür ederim. Sorunlarım, kendi dosyalarımızı yeniden yapılandırmaya zorlandığımız zaman (!?) çözülmesine rağmen, cevabınızın bunu yapmanın doğru yolu olduğuna inanıyorum. –

+0

Pleasure. Aynı problemi kendim de yaşadım. Bu yüzden gelecek adamlar için bir çözüm ekledi. –