Дано:Как выполнить пользовательские действия в MSI без вызова установки?
- Wix 3,0 используется для создания MSI.
- Продукт состоит из нескольких функций.
- Каждая функция имеет несколько дополнительных функций. Это стандартное дерево функций MSI.
- Каждая функция или вспомогательная функция зависят от множества внешних компонентов. . .NET 4, ASP.NET и т. Д.
- Пользовательское действие, написанное на C# с использованием Wix 3.0 SDK, обрабатывает эти зависимости и оценивает, присутствуют ли компоненты или нет для данного набора функций.
- В момент установки, если отсутствует зависимый компонент для заданного выбор функций, установка завершается с ошибкой.
Для достижения: Возможность выполнения проверки предварительных условий, которые уже сделали в MSI как пользовательские действия во время установки, без установки MSI на данной машине.
Неудачные попытки:
1) Пользовательские действия имеют сигнатуру функции, как этот
[CustomAction]
public static ActionResult ProcessFeaturePrerequisite(Session session);
Для того, чтобы получить объект сеанса я использовал следующие API, присутствующей в Wix 3.0 SDK
Session session = Installer.OpenPackage("Pathto\\Product.msi", true); // true doesn’t install it. Also tried with false, but didn’t work.
Когда я вызываю вышеуказанный метод od с вышеприведенным сеансом после неудачных действий.
session.Features["SomeFeature"].CurrentState;
Это исключение.
System.ArgumentException was unhandled by user code
Message=Feature ID not registered. SomeFeature
Source=Microsoft.Deployment.WindowsInstaller
StackTrace:
at Microsoft.Deployment.WindowsInstaller.FeatureInfo.get_CurrentState()
Также ниже критического API, который определяет статус предварительного условия, всегда возвращает false.
session.EvaluateCondition(prereq);
2) Я знаю способ командной строки, чтобы указать функции, выше MSI и установить его. Он идет как этого
msiexec /i "Product.msi" ADDLOCAL=ALL REMOVE="Foo,Bar "
Я не мог найти любой API в SDK, который позволяет мне передать дополнительный Params, который возвращает объект сеанса без запуска установки. Мое предположение заключается в том, что такой парам сделает session.Features более действительным.
Вопросы: Итак, как достичь цели? Есть
- любой API в Wix SDK, который позволяет мне называть пользовательские действия без вызова установки?
- любой способ вызвать пользовательское действие из командной строки для данного MSI без установки?
- любой способ сделать Wix для изменения MSI в принимающей командной строке , содержащей пользовательское имя действия, которое только оценивает действие?
- любой лучший способ сделать то же самое?
Один быстрый вопрос о последующем вопросе, я 'session.EvaluateCondition (prereq)' внутри текущего пользовательского действия. С точки зрения базы данных MSI эти карты выглядят следующим образом: NETFX4 -> (AppSearch.Property, Signature) NetFx4 -> (RegLocator.Signature, Key, Name) ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ NET Framework \ NDP \ v4 \ Full, Install' Is есть ли API в DTF WiX, который оценивается выше? – Ankush
Я не уверен, что понимаю ваш вопрос ... –
Извините, мой плохой. Написал выше в спешке. Я изучаю этот вопрос. – Ankush