Soru Windows 7 yükleme sırasında WiX HKLM kayıt defteri ayarını eklemez


Windows XP ile mükemmel bir şekilde çalışan bir WiX yükleyici yazdım, ancak bir Windows 7 kutuya yüklerken kayıt defteri girişleriyle zorlukla karşılaşıyorum. Başlat menüsünde gösterilecek programın kayıt defteri girişinin yanı sıra bir HKLM girdisi eklemem gerekiyor. Her iki giriş türü için kullanıyorum kod İşte:

<!-- Create the registry entries for the program -->
<DirectoryRef Id="TARGETDIR">
  <Component Id="RegistryEntriesInst" Guid="...">
    <RegistryKey Root="HKLM"
                 Key="Software\$(var.Manufacturer)\$(var.ProductName)"
          Action="createAndRemoveOnUninstall">
      <RegistryValue
          Type="string"
          Name="installed"
          Value="true"
          KeyPath="yes"/>
    </RegistryKey>
  </Component>
  <Component Id="RegistryEntriesVer" Guid="...">
    <RegistryKey Root="HKLM"
                 Key="Software\$(var.Manufacturer)\$(var.ProductName)"
          Action="createAndRemoveOnUninstall">
      <RegistryValue
          Type="string"
          Name="version"
          Value="$(var.ProductVersion)"
          KeyPath="yes"/>
    </RegistryKey>
  </Component>
</DirectoryRef>

<!-- To add shortcuts to the start menu to run and uninstall the program -->
<DirectoryRef Id="ApplicationProgramsFolder">
  <Component Id="ApplicationShortcut" Guid="...">
    <Shortcut Id="ApplicationStartMenuShortcut"
              Name="$(var.ProductName)"
              Description="..."
              Target="[SERVERLOCATION]$(var.Project.TargetFileName)"
              WorkingDirectory="SERVERLOCATION"/>
    <Shortcut Id="UninstallProduct"
                  Name="Uninstall $(var.ProductName)"
                  Description="..."
                  Target="[System64Folder]msiexec.exe"
                  Arguments="/x [ProductCode]"/>
    <RemoveFolder Id="SERVERLOCATION" On="uninstall"/>
    <RegistryValue
        Root="HKCU"
        Key="Software\$(var.Manufacturer)\$(var.ProductName)"
        Name="installed"
        Type="integer"
        Value="1"
        KeyPath="yes"/>
    </Component>
</DirectoryRef>

Bu sorunu nasıl giderebilirim?

Bir yan not, kayıt defteri izinlerini Windows XP ve Windows 7 bilgisayarlarda aynıdır.


32
2017-12-10 16:04


Menşei


Kayıt defteri girişlerinin nereye gittiğini buldum. Aslında Wow6432Node'un altına yerleştiriliyorlar. Software \ Wow6432Node yerine normal Yazılım Kayıt Defteri Anahtarının altına yerleştirmenin bir yolu var mı? - Scott Boettger


Cevaplar:


Bunun neden olduğunu anladım.

Bir x86 platformunda derlenen WiX yükleyici ile Windows 7, 32 bit kayıt defteri anahtarlarını içeren 32 bit yükleyici olarak seçti. Windows 7 64-bit, sadece ne olduğunu gördüğümü yaparak 32-bit kayıt defteri girdilerini işler.

Program hala kayıtlıydı; Sadece kayıt defterinin 64-bit bölümünde değildi. Bir 64 bit sistem için (ProgramFileFolder ProgramFiles64Folder, vb.) Hale getirmek için gerekli değişiklikleri yaparken bir x64 platformu altında derleyin ve bir şeyleri doğru yere koyacaktır.


31
2017-12-10 19:28



Belki de girdiyi HKLM \ Software \ Wow6432Node [var.Manufacturer] [var.ProductName] altında bulduğunuzu belirterek - anhoppe


Bunu benim için temel olarak çözdüğünüz için teşekkürler!

Sadece bunun için x64 olması için her şeyi değiştirmenize gerek olmadığını eklemeyi istedim, sadece söz konusu bileşenin x64 olarak işaretlenmesi gerekiyor.

<Component Id="MyShellExtension64.dll" Guid="..." Win64="yes">
  <Condition>VersionNT64</Condition>
  <File
    Name="MyShellExtension64.dll"
    Source="MyShellExtension64.dll"
    KeyPath="yes"/>
  <RegistryValue
    Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved"
    Name="{GUID}" Value="My Shell Extension" Type="string"/>
</Component>

Not Win64 = "evet"kayıt defterinin 64-bit alanına yazmak için gereken tüm bu. VersionNT64 koşulu, bu bileşenin yalnızca bir x64 sistemine yüklenebilmesi için var.

Benim durumumda bu, ICE80 uyarıları veriyor çünkü 32-bit ProgramFilesFolder'da 64-bit bir bileşen yüklemek istiyorum. Bunları görmezden geldiğim için mutluyum çünkü ana uygulamam x64 değil, yalnızca kabuk uzantısı ve kabuk uzantısını kendi özel klasörüne koymak istemiyorum.


17
2018-04-05 07:33



Bunu yapıyorum, ancak temelde kayıt defteri ayarlarını iki kez koymanızı sağlar - bir kez win64 = evet ve durum VersionNT64 ve diğeri yok ve VersionNT64 ile değil - iki kez yazmayı önlemek için bir dahil dosyası kullanabilirsiniz ve Aynı parça iki kez - ve ICE80 uyarıları sizi rahatsız ediyorsa, bunları proje özellik sayfalarında engelleyebilirsiniz. - BrainSlugs83


Windows 7'nin belirli kayıt defteri anahtarlarını nasıl işlediği konusunda bazı farklılıklar vardır. Kayıt defteri yansıması Windows 7'den başlayarak kaldırıldı. Burada göründüğünüze emin değilim, ancak kontrol edin bu bağlantı daha fazlası için.

Ayrıca, Windows 7'nin 64-bit bir sürümü ile çalışıyorsanız, bazı belirtimlere başvurabilirsiniz. MSDN 64-bit Windows Programlama Kılavuzu.

Ayrıca, Windows tadı (XP, Vista, 7, vb.) Temelinde farklı konumlara farklı kayıt defteri anahtarlarına sahip olmanız gerekiyorsa Bu Stack Overflow sorusu ayrıca sizin için bir cevap var.


5
2017-12-10 16:51



Bu oldukça yardımcı oldu ve bana 32'den 64 bit sistemlere geçişi daha iyi anladı. - Scott Boettger