У меня проблема с установщиком wix, который не устанавливает наше приложение IISversion> = 10. Он работает на IISVersion <10.

Я нашел эту ссылку на github. https://github.com/wixtoolset/issues/issues/5276 Эта ссылка предлагает добавить настраиваемое действие, которое возвращает ActionResult.Success, если IISRegistryversion имеет значение> = IISRequiredVersion. Но я получаю следующую ошибку. Ошибка происходит после этого в журнале Выполнение действия: LaunchConditions

Начало действия 12:46:02: LaunchConditions. Либо переменная не устанавливается, либо не вызывается настраиваемое действие. У меня есть вход в настраиваемое действие, но он ничего не регистрирует, даже если включен подробный.

Как убедиться, что условие запуска / настраиваемое действие вызывается до того, как это условие будет оценено? Кто-нибудь может подсказать, пожалуйста?

enter image description here

Так выглядит Product.wxs

<InstallExecuteSequence>
    <Custom Action="CA.DS.CreateScriptDirCommand" Before="InstallFinalize">
        <![CDATA[NOT Installed AND (&Feature.DatabaseServer.Database = 3)]]>
    </Custom>
    <Custom Action="Iis.CheckInstalledVersion.SetProperty" Before="LaunchConditions" >
        <![CDATA[NOT Installed AND &Feature.WebServer.WebServices = 3]]>
    </Custom>
    <Custom Action="Iis.CheckInstalledVersion" After="Iis.CheckInstalledVersion.SetProperty" >
        <![CDATA[NOT Installed AND &Feature.WebServer.WebServices = 3]]>
    </Custom>
</InstallExecuteSequence>
<Condition Message="This application requires IIS [Iis.RequiredVersion] or higher. Please run this installer again on a server with the correct IIS version.">
    <![CDATA[Iis.IsRequiredVersion > 0]]>
</Condition>


<Fragment>
    <CustomAction Id='Iis.CheckInstalledVersion.SetProperty' Property='Iis.CheckInstalledVersion' Execute='immediate' Value='' />
    <!--Note: Changed "Execute" from "deferred" to "immediate", to avoid error "LGHT0204: ICE77: Iis.CheckInstalledVersion is a in-script custom action. It must be sequenced in between the InstallInitialize action and the InstallFinalize action in the InstallExecuteSequence table"-->
    <!--Note: Changed "Impersonate" from "no" to "yes", to avoid warning "LGHT1076: ICE68: Even though custom action 'Iis.CheckInstalledVersion' is marked to be elevated (with attribute msidbCustomActionTypeNoImpersonate), it will not be run with elevated privileges because it's not deferred (with attribute msidbCustomActionTypeInScript)"-->
    <CustomAction Id='Iis.CheckInstalledVersion' BinaryKey='B.WixCA' DllEntry='CheckInstalledIISVersion' Execute='immediate' Return='check' Impersonate='yes' />
    <Component 
</Component>
</Fragment>


    [CustomAction]
    public static ActionResult CheckInstalledIISVersion(Session session)
    {
        try
        {
            session.Log("* Starting to check installed IIS version");
            const int IisRequiredVersion = 7;

            string IISMajorVersionFromRegistry = session["IISMAJORVERSION"];
            session.Log(string.Format("*!*! DEBUG; CheckInstalledIisVersion; IIS major version: {0}", IISMajorVersionFromRegistry));
            string iisMajorVersionNumeric = IISMajorVersionFromRegistry.Replace("#", string.Empty);
            int iisMajorVersion = int.Parse(iisMajorVersionNumeric, CultureInfo.InvariantCulture);

            bool isRequiredVersion = iisMajorVersion >= IisRequiredVersion;

            // Setting the required version as a custom property, so that it can be used in the condition message
            session["IIs.RequiredVersion"] = IisRequiredVersion.ToString(CultureInfo.InvariantCulture);
            // Setting the results of the check as "bool"
            session["Iis.IsRequiredVersion"] = isRequiredVersion ? "1" : "0";

            return ActionResult.Success;
        }
        catch (Exception ex)
        {
            session.Log(string.Format("CheckInstalledIisVersion; Error occured SC: {0}", ex.Message));
            return ActionResult.Failure;
        }
    }

Работает без условия. Условие выполняется до

0
user575219 15 Дек 2017 в 21:55

1 ответ

Лучший ответ

Проверка функции Feature.WebServer.WebServices = 3 не будет работать, потому что состояние функции «для установки» устанавливается только после расчета стоимости (и часто выбора функции в диалоговых окнах функций). Итак, CA не вызывается.

Вероятно, вам нужно переосмыслить это и принудительно выполнить проверку IIS после CostFinalize, а затем, возможно, предупредить, что IIS не установлен / не запущен и т. Д. Поэтому вы должны выполнить поиск IIS безоговорочно, чтобы установить свойство, а не использовать его в качестве запуска условие. Затем выведите предупреждение, если & Feature.WebServer.WebServices = 3 и версия IIS слишком мала.

См. Документацию по условиям действия функции и ссылку на CostFinalize:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa368012(v=vs.85).aspx

1
PhilDW 16 Дек 2017 в 18:32