Подтвердить что ты не робот

WIX MSI с условием запуска для предварительного запроса IIS не работает на WS2008

Привет, у меня есть MSI, построенный с помощью WiX, который пытается указать условие запуска, которое выполняется только при установке IIS. Это условие не работает по желанию на WS2008 x64. Он работает на моей машине Windows 7 x64.

Свойство:

<!-- This is used later in a Launch condition. -->
<!-- see http://learn.iis.net/page.aspx/135/discover-installed-components/ -->
<Property Id="IIS7" Value="#0">
  <RegistrySearch Id="IIS7W3SVC"
                  Type="raw"
                  Root="HKLM"
                  Key="SOFTWARE\Microsoft\InetStp\Components"
                  Name="W3SVC" />
</Property>

Условие:

<Condition Message="Cannot install. You must install IIS before installing this product.">
  NOT IIS56 = "#0" OR NOT IIS7 = "#0"
</Condition>

(для IIS6 также существует свойство, но здесь это не имеет значения).

Пользователь сообщает, что он видит это сообщение "не может установить". Он также говорит, что IIS установлен и функционирует.

Имеет ли WS2008 другой раздел реестра для присутствия IIS?
Каков предпочтительный механизм определения наличия IIS?

Это WIX 3.5. Не уверен в точности версии WS2008.

Это может быть похоже на проблему, описанную здесь. Этот вопрос не решен.

идеи?

4b9b3361

Ответ 1

Почему бы просто не использовать расширения WIS IIS и IISMAJORVERSION и IISMINORVERSION?

Мы используем их, и я знаю, что они работают над каждой версией окон, которые мы использовали с XP на 2008R2.

  <!-- Reference WixIIsExtension in project and pull in property by ref -->
  <PropertyRef Id="IISMAJORVERSION"/>
  <Condition Message="Install requires IIS 6 or 7.">
     <![CDATA[Installed OR (IISMAJORVERSION AND (IISMAJORVERSION = "#6" OR IISMAJORVERSION = "#7"))]]>
  </Condition>

Ответ 2

WIX 3.5 не поддерживает проверку версии IIS для IIS 7.0 и выше.

Я бы предложил вам вызвать настраиваемое действие, чтобы проверить версию IIS, а затем выполнить действия на этой основе.

RegistryKey regKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\InetStp");
if (regKey != null)
{
string IISVersion = Convert.ToString(regKey.GetValue("MajorVersion")) + "." + Convert.ToString(regKey.GetValue("MinorVersion"));
}

Затем на основе regKey вы можете установить переменные.