Nano Hash - криптовалюты, майнинг, программирование

INSTALLLEVEL не устанавливает компонент

У меня есть две особенности:

    <Feature Id='BaseProductFeatures' Title='Feature 1' Level='1'>
        <ComponentRef Id='WebAppVDirComponent'/>
        <ComponentRef Id='someVDirComponent'/>
        <ComponentRef Id='anotherWCFVDirComponent'/>
        <ComponentGroupRef Id='group_IMPORTFOLDERFILES'/>
        <ComponentGroupRef Id='group_WINSERVERFILES'/>
    </Feature>

    <Feature Id='SMSGWFeature' Title='Feature 2' Level='2'>
        <ComponentGroupRef Id='group_SMSGWWEBAPPFILES'/>
    </Feature>

Перед установкой я изменяю INSTALLLEVEL на 2 с помощью пользовательского действия:

    [CustomAction]
    public static ActionResult ChangeInstallLevel(Session session) {
        session["INSTALLLEVEL"] = "2";
        return ActionResult.Success;
    }

Значение устанавливается, но компонент 2 (SMSGWFeature) не устанавливается. Почему это? Я не вижу ни одного из компонентов в ComponentGroupRef, group_SMSGWWEBAPPFILES, установленных в каталоге, в котором я ожидаю их увидеть. Но установщик будет работать, если я установлю уровень компонента 2 (SMSGWFeature) равным 1.


Ответы:


1

Убедитесь, что ваше пользовательское действие выполняется до InstallValidate в InstallExecuteSequence. Установка INSTALLLEVEL после InstallValidate ни на что не влияет.

Кроме того, подробный журнал установки помогает определить, не установлена ​​ли функция или компонент и почему. . Просто найдите InstallValidate в журнале и проверьте состояние функций и компонентов, а также действия по установке.

09.12.2011
  • +1. Кстати, @Alexandru, создание пользовательского действия C # для установки свойства требует больших затрат. Взгляните на элемент SetProperty: wix.sourceforge.net/manual-wix3/wix_xsd_setproperty.htm 12.12.2011

  • 2

    Что ж, файлы журналов ничего не говорят, и я установил INSTALLLEVEL перед InstallValidate (я установил его в пользовательском интерфейсе перед установкой). Что касается накладных расходов, все это происходит быстро на этой медленной машине, но опять же это настраиваемое действие, которое я использую в пользовательском интерфейсе при следующем нажатии кнопки. Но я узнал, в чем проблема и как ее обойти.

    Что касается этой ссылки, слишком поздно менять INSTALLLEVEL с пользовательский интерфейс, потому что INSTALLLEVEL учитывается в стандартном действии CostFinalize, а стандартное действие CostFinalize выполняется до того, как у меня есть время, чтобы позволить пользователю выбрать свои функции и вызвать мое действие. Cosmin, я не думаю, что INSTALLLEVEL имеет значение до InstallValidate, кажется, что он имеет значение гораздо раньше, в данном случае он принимается во внимание до CostFinalize.

    Что мне нужно было сделать, так это...

    Я изменил свою вторую функцию, чтобы она отсутствовала:

    <Feature Id='BaseProductFeatures' Title='Feature 1' Level='1'>
        <ComponentRef Id='WebAppVDirComponent'/>
        <ComponentRef Id='someVDirComponent'/>
        <ComponentRef Id='anotherWCFVDirComponent'/>
        <ComponentGroupRef Id='group_IMPORTFOLDERFILES'/>
        <ComponentGroupRef Id='group_WINSERVERFILES'/>
    </Feature>
    
    <Feature Id='SMSGWFeature' Title='Feature 2' Level='2' Absent='allow'>
        <ComponentGroupRef Id='group_SMSGWWEBAPPFILES'/>
    </Feature>
    

    Я изменил свое пользовательское действие, чтобы включить или отключить эту функцию:

    foreach (FeatureInfo aFeature in session.Features) {
        if (session["INSTALLSMSGATEWAYSERVICE"] == "" && aFeature.Name == "SMSGWFeature") {
            aFeature.RequestState = Microsoft.Deployment.WindowsInstaller.InstallState.Absent;
        }
        else if (session["INSTALLSMSGATEWAYSERVICE"] == "1" && aFeature.Name == "SMSGWFeature") {
            aFeature.RequestState = Microsoft.Deployment.WindowsInstaller.InstallState.Local;
        }
    }
    
    12.12.2011
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..