Как я могу управлять состоянием сеанса MSI в Javascript Custom Actions? - PullRequest
1 голос
/ 10 января 2011

У меня есть ISAPI DLL, дополнение к IIS.Я создаю установщик для него, используя WIX 3.0.

В проекте установщика у меня есть ряд пользовательских действий, реализованных в Javascript.Один из них, запускаемый при запуске установки, останавливает все работающие веб-сайты IIS.Другой запускает веб-сайты IIS в конце установки.Это работает, CA вызываются в нужное время и в правильных условиях.но логика наивна.Он останавливает все веб-сайты в начале (даже если они уже остановлены) и запускает все веб-сайты в конце (даже если они были ранее остановлены).Это явно неправильно.

Что я хотел бы сделать, так это отслеживать, в каком сеансе веб-сайтов требовалась остановка в начале, а затем, в конце, только пытаться перезапустить эти веб-сайты.Получить состояние веб-сайта легко, используя свойство ServerState объекта CIM.У меня вопрос: как мне хранить эту информацию в сеансе MSI?

Легко вставить один фрагмент информации в свойство сеанса , но как лучше всего хранить набор из N фрагментов информации, по одному для каждого веб-сайта?В некоторых случаях может быть 1 веб-сайт, в некоторых случаях 51 веб-сайт.

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

Предложения?

Ответы [ 2 ]

0 голосов
/ 26 января 2011

Есть простое решение.У меня была судорога мозга.

Все элементы, которые мне нужно было сохранить, были строками - фактически названия веб-сайтов, которые были остановлены во время установки.Я просто использовал Javascript String.join метод для создания одной строки и вставил ее в переменную сеанса.Например:

Session.Property("CA_STOPPEDSITES") = sitesThatWereStopped.join(",");

Затем, чтобы получить эту информацию позже в другом настраиваемом действии, я делаю

var stoppedSites = Session.Property("CA_STOPPEDSITES");
if (stoppedSites != null) {
    var sitesToStart = stoppedSites.split(",");
    ....

Просто, легко

0 голосов
/ 10 января 2011

Возможно, вы захотите проверить:

VBScript (и Jscript) MSI CustomActions suck

C ++ или C # - гораздо лучший выбор.Если ваше приложение уже имеет зависимости от каркаса, тогда добавление зависимостей в ваш установщик является хорошим логическим выбором.В WiX есть Deployment Tools Foundation (DTF), в котором есть шаблон пользовательских действий, который очень напоминает jscript.Затем вы можете создать словарь веб-сайтов и их состояние и сериализовать его в одно свойство.С обратной стороны вы можете пересоздать эту коллекцию и затем действовать в соответствии с ней.

Не говоря уже о том, что история отладки НАМНОГО лучше в DTF.

...