Проблема с записью реестра в одном файле .wxs для создания как 32-разрядного, так и 64-разрядного установщика - PullRequest
0 голосов
/ 19 марта 2020

Вот мой сценарий:

<DirectoryRef Id="TARGETDIR">
      <!--for 64 bit platform-->
      <?if $(sys.BUILDARCH)="x64"?>
        <Component Id="RegistryEntries64" Guid="EFC1C5ED-0BC8-4B52-943A-BFF5F3136B4F" Win64="yes">
          <RegistryKey Root="HKLM" Key="SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers">
            <RegistryValue Type="string" Name="$(var.ProductNameForRegistyEntry)" Value="Installed" KeyPath="yes"/>
          </RegistryKey>
          <RegistryKey Root="HKLM" Key="SOFTWARE\ODBC\ODBCINST.INI\$(var.ProductNameForRegistyEntry)">
           <-------/>
          </RegistryKey>
          <RemoveFolder Id="RegistryEntries64" On="uninstall"/>
        </Component>
      <?else?>
        <!--for 32 bit platform-->
        <Component Id="RegistryEntries86" Guid="E37BE3EF-1979-4C56-A768-2D6B6AB99870" Win64="no">
            <RegistryKey Root="HKLM" Key="SOFTWARE\WOW6432Node\ODBC\ODBCINST.INI\ODBC Drivers">
              <RegistryValue Type="string" Name="$(var.ProductNameForRegistyEntry)" Value="Installed"/>
            </RegistryKey>
            <RegistryKey Root="HKLM" Key="SOFTWARE\WOW6432Node\ODBC\ODBCINST.INI\$(var.ProductNameForRegistyEntry)">
              <----->
            </RegistryKey>
          <RemoveFolder Id="RegistryEntries86" On="uninstall"/>
         </Component>
       <?endif?>

    </DirectoryRef>

С помощью этого сценария создан 32-разрядный установщик (выбор платформы x86 в Visual Studio 2015), работающий нормально на компьютере с 64-разрядной операционной системой, запись реестра создается внутри WOW6432Node, в основном это 32-битный установщик для установки на 64-битной машине, так что пользователь может установить как 64-битную, так и 32-битную программу установки на 64-битной машине, но в 32-битной операционной системе запись реестра должна быть в SOFTWARE \ ODBC \ ODBCINST.INI \ ODB C Драйверы. На 32-битной машине команда Get-OdbcDriver не возвращает драйвер в списке. Переменная платформы не предлагается самим Wix sys.BUILDARCH извлекает целевой тип платформы. Нужно ли мне писать отдельный сценарий для 32-разрядной операционной системы, где я дам запись реестра SOFTWARE \ ODBC \ ODBCINST.INI \ ODB C Drivers? Или есть какое-то другое решение? Я смотрю так много сообщений от stackoverflow и других сообщений через inte rnet, но ничего связанного с этим я не смог найти. Заранее спасибо

1 Ответ

0 голосов
/ 20 марта 2020

Вам не нужно создавать отдельный скрипт для этого. Одним из возможных решений может быть определение другой переменной (т.е. Installer_x86_x86), и на основе ее значения вы можете создать 32-разрядный установщик как для 64-разрядной, так и для 32-разрядной ОС.

 <?if $(var.Installer_x86_x86)="no"?>
              <RegistryKey Root="HKLM" Key="SOFTWARE\WOW6432Node\ODBC\ODBCINST.INI\ODBC Drivers">
                <RegistryValue Type="string" Name="$(var.ProductNameForRegistyEntry)" Value="Installed"/>
              </RegistryKey>
              <RegistryKey Root="HKLM" Key="SOFTWARE\WOW6432Node\ODBC\ODBCINST.INI\$(var.ProductNameForRegistyEntry)">
                <RegistryValue Type="string" Name="Description" Value="TIBCO ComputeDB ODBC Driver" />

              </RegistryKey>
             <?else?>
              <RegistryKey Root="HKLM" Key="SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers">
                <RegistryValue Type="string" Name="$(var.ProductNameForRegistyEntry)" Value="Installed"/>
              </RegistryKey>
              <RegistryKey Root="HKLM" Key="SOFTWARE\ODBC\ODBCINST.INI\$(var.ProductNameForRegistyEntry)">
                <RegistryValue Type="string" Name="Description" Value="TIBCO ComputeDB ODBC Driver" />

              </RegistryKey>
            <?endif?>

Было бы лучше, если бы вы создали файл .wxi, поместили в него все свои переменные и включили его в свой файл .wxs, чтобы вам было легко изменить значение переменной перед созданием установщик

...