WIX MSI, имеющий условие запуска для предварительного запроса IIS, завершается неудачно на WS2008 - PullRequest
12 голосов
/ 20 апреля 2011

Эй, у меня есть 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.

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

идей?

Ответы [ 2 ]

30 голосов
/ 20 апреля 2011

Почему бы просто не использовать расширения Wix 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>
0 голосов
/ 22 апреля 2011

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 вы можете установить переменные.

...