Wix Toolset CustomAction для определения, является ли ОС Windows 7 / xp домашней или стартовой версией, и отображать сообщение, если нет.

Я новичок в установке Wix Toolset. Я использую Wix 3.7 и Visual Studio 2010 SP1.

Я просматривал учебник, в котором используется BootStrapper, в котором есть условное сообщение в файле Product.Wxs для проверки установки .NET framework 4.0, есть переменная PropertyRef Id и сообщение об условии

<PropertyRef Id="NETFRAMEWORK40FULL"/>
<Condition Message="This application requires .NET Framework 4.0. Please install the .NET Framework then run  
   this installer again.">
  <![CDATA[Installed OR NETFRAMEWORK40FULL]]>
</Condition>

Как можно аналогичным образом проверить состояние для выпусков Windows XP Starter / Home и Windows 7 Starter / Home / Home Premium и показать условное сообщение о том, что установка не поддерживает перечисленные ОС и требует профессиональных выпусков.

Я просмотрел ссылки на сайте Wixtoolset, но это не помогло:

Проверка версий Windows http://wixtoolset.org/documentation/manual/v3/howtos/redistributables%5fand%5finstall%5fchecks/block%5finstall%5fon%5fos.html

http://msdn.microsoft.com/library/aa370556.aspx

Я также попытался поместить условие в файл Bundle.wxs загрузчика как:

<Bundle Name="!(loc.ProductName)" Compressed="yes" Version="1.2.6.0"  
SplashScreenSourceFile="Resources\SplashScreen.bmp" IconSourceFile="Resources\IXMWeb.ico"  Manufacturer="! 
(loc.ManufacturerName)" UpgradeCode="FED377E5-8762-48C4-B123-8D4AD89B0222" Condition="((VersionNT >= v5.1) AND 
(ServicePackLevel >= 3) AND NOT(NTSuitePersonal)) OR ((VersionNT >= v5.2) AND (ServicePackLevel >= 2)) OR 
(VersionNT >= v6.0 AND NOT(NTSuitePersonal))">

Я прочитал сообщение о том, что мне нужно использовать NTSuitePersonal вместо MsiNTSuitePersonal для проверки того, является ли устанавливаемая версия Домашней версией.

Пожалуйста, дайте мне знать, где я ошибаюсь в указанном выше условии.


person user3041212    schedule 14.04.2014    source источник


Ответы (1)


Для проверки версии Windows (например, Windows XP, Vista, 7, 8, ...) вы можете использовать свойство VersionNT, как описано в предоставленных вами ссылках. Для проверки выпуска (например, Home, Premium, Professional, ...) в соответствии с этот SO-вопрос, вы можете использовать значения под кустом реестра HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion.
В сочетании с WiX вы можете выполнить поиск в реестре, который устанавливает свойство, а затем используйте это свойство в своем состоянии (я мог проверить точный ключ реестра только в Windows 7 Professional, где это имена EditionID):

...

<Property Id="WINDOWSEDITION" Secure="yes">
    <RegistrySearch Id="WindowsEditionReg" Root="HKLM" Key="SOFTWARE\Microsoft\Windows NT\CurrentVersion" Name="EditionID" Type="raw" />
</Property>

...

См. Также Как: прочитать запись реестра во время установки.

Изменить: используя свойства, указанные в вашей ссылке, Значения свойств операционной системы и Как: прочитать запись в реестре во время установки и Как: заблокировать установку в зависимости от версии ОС , пример проверки того, установлена ​​ли у пользователя Windows 7 Professional с установленным пакетом обновления 1, и запретить установку для всего остального будет (поместите его в тег Product):

<Condition Message="This application can only be installed on Windows 7 Professional with Service Pack 1.">
    <![CDATA[Installed OR (VersionNT = 601 AND WindowsBuild > 7100 AND WINDOWSEDITION ~= "Professional")]]>
</Condition>

Свойство Installed в начале условия гарантирует, что условие проверяется только в том случае, если продукт еще не установлен. Затем в скобках мы находим другие условные элементы. Мы гарантируем, что работаем в Windows 7 (VersionNT = 601 AND WindowsBuild > 7100) и что выпуск правильный (WINDOWSEDITION ~= "Professional"). Обратите внимание, что ~= проверяет строку без учета регистра.
Синтаксис условных операторов можно найти в здесь. Вы, конечно, можете комбинировать любые дополнительные условия, используя OR, AND и группируя их в круглых скобках, где это необходимо. В реальном сценарии у вас, скорее всего, будет другое условие, например Windows 7 и более поздние версии.

person taffit    schedule 14.04.2014
comment
Привет! Большое спасибо. как я могу использовать этот идентификатор свойства в моем состоянии? - person user3041212; 15.04.2014
comment
Я отредактировал ответ выше, добавив пример и дополнительные ссылки. - person taffit; 15.04.2014
comment
Большое спасибо, чувак! Это сработало для меня. Еще раз спасибо. И еще кое-что, не могли бы вы предложить несколько хороших руководств по wix и что должно быть предварительным условием для изучения wix. Из того, что я могу сделать до сих пор, так это то, что нужно хорошо понимать следующее: 1. Установщик Windows 2. XML 3. Переменные Wix 4. WPF (в случае загрузчика) 5. Структура реестра окон. Что еще нужно знать? Пожалуйста, добавьте еще несколько ссылок. Еще раз большое вам спасибо. - person user3041212; 15.04.2014
comment
Мы используем условие ~ = для проверки Professional Edition. Как мне проверить регистронезависимость! = Для Personal Edition? Я имею в виду, что я использую WINDOWSEDITION ‹› Personal в соответствии с таблицей условных операторов. Но это условие истинно. WINDOWSEDITION! = Личная WINDOWSEDITION! ~ = Личная WINDOWSEDITION ~! = Personal Это выдает ошибку. - person user3041212; 15.04.2014
comment
Просто используйте отрицание: NOT (WINDOWSEDITION ~= "Personal"). - person taffit; 15.04.2014
comment
с этим тоже пробовал. В итоге я использовал все названия Suite, приведенные в таблице по этой ссылке. geoffchappell.com/studies/windows/km/ ntoskrnl / api / ex / exinit / - person user3041212; 15.04.2014
comment
Что касается ссылок для изучения WiX: я лично считаю, что если вы изучаете WiX (в основном, делая), остальное приходит автоматически, так как вам нужно проверять различные решения проблем, с которыми вы сталкиваетесь во время разработки, например прочтите о таблицах WI, условиях и т. д. Полезно: хитрости и советы по WiX и руководство от tramontana. Также я ежедневно читаю файл справки WiX с его различными инструкциями ;-). Однако никогда не работал с WiX Bootstrapper (до сих пор). - person taffit; 15.04.2014
comment
Вам следует попробовать свойство MsiNTSuitePersonal, чтобы узнать, является ли это версией Home. - person PhilDW; 16.04.2014
comment
Хороший ответ @PhilDW! Я не знал об этой собственности, спасибо. - person taffit; 17.04.2014
comment
@taffit: я пробовал использовать свойство MsiNTSuitePersoanl. Но у меня это не сработало. Гораздо лучшим подходом было использование настраиваемого действия для ОС. Подробнее: wixtoolset.org/documentation/manual/v3/customactions/ - person user3041212; 29.04.2014