Свойство метабазы ​​WiX IIS - PullRequest
       18

Свойство метабазы ​​WiX IIS

2 голосов
/ 25 октября 2011

Есть ли способ получить свойство метабазы ​​Enable32BitAppOnWin64 в WiX для IIS6?

Я устанавливаю веб-приложение и мне нужно запустить aspnet_regiis.exe на 64-битной машине, на которой IIS установлен в 32-битный режим. Чтобы получить путь к exe, я использую следующее:

<!--<?if $(var.Platform) = x64 ?>-->
    <SetProperty Id="ASPNETREGIIS" Sequence="execute" Before="ConfigureIIs" Value="[NETFRAMEWORK20INSTALLROOTDIR64]aspnet_regiis.exe" />
<!--<?else ?>
    <SetProperty Id="ASPNETREGIIS" Sequence="execute" Before="ConfigureIIs" Value="[NETFRAMEWORK20INSTALLROOTDIR]aspnet_regiis.exe" />
<?endif ?>-->

Однако, когда включен 32-битный режим, я не могу рассчитывать на платформу, чтобы получить правильный путь к исполняемому файлу.

1 Ответ

3 голосов
/ 26 октября 2011

В WiX нет стандартного способа сделать это - вам понадобится специальное действие. Это должен быть немедленный CA, и он установит свойство, которое вы будете использовать в ваших условиях. Это пример кода, который делает то, что вам нужно, я думаю:

 static bool IsIIS32bit()
 {
   var appPools = new DirectoryEntry("IIS://localhost/w3svc/AppPools");
   int enable32Bit;

   try
   {
     enable32Bit = (int)appPools.InvokeGet("Enable32bitAppOnWin64");
   }
   catch
   {
     enable32Bit = 0;
   }

   return enable32Bit == 1;
 }

Обратите внимание, что в вашем примере вы используете переменные времени сборки, чтобы выбрать один из двух элементов SetProperty. Это будет работать, если у вас есть 2 пакета MSI, по одному для каждой платформы. В этом случае каждый ваш MSI-пакет будет иметь правильно установленное свойство. Дополнительное требование, которое вы добавляете сейчас (проверьте режим разрядности IIS), вынуждает вас перенести проверку во время установки. Следовательно, вам придется как-то переделывать логику условий.

...