WIX: сохранить данные сеанса между C # CustomActions и впоследствии отображать диалог WIX - PullRequest
1 голос
/ 08 июля 2010

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

* Развертывает сборку нашего приложения без перезаписи файла App.Config. для заявки

* Загружает ключ / значения в файле App.Config и запрашивает у пользователя «по умолчанию» (существующие значения) и позволяет им изменять их до окончания

* СОХРАНЯЕТ значения, предоставленные пользователем (или значения по умолчанию, если пользователь не сделал изменения) обратно в файл App.Config для использования с приложением.

У меня есть диналоги WIX и пользовательские действия, успешно выложенные где после InstallFinalize выполняется моя пользовательская операция «LoadDefaultOptions», который успешно принимает каталог установки и файл конфигурации приложения name, загружает его в программу чтения XML и анализирует пары ключ / значение, устанавливая их в переменную сеанса следующим образом:

session[key.toUpper()] = value;

Мои пользовательские действия определены как:

<CustomAction Id="LoadDefaultOptions" Return="asyncWait" Execute="immediate" BinaryKey="aeserverDbDialogPackage.dll" DllEntry="LoadDefaultOptions"/>
<CustomAction Id="SetConfigOptions" Return="check" Execute="immediate" BinaryKey="aeserverDbDialogPackage.dll" DllEntry="SetConfigOptions"/>

LoadDefaultOptions выполняется так:

<Custom Action="LoadDefaultOptions" After="InstallFinalize" />

У меня есть свойства редактирования диалогового окна, настроенные так:

<Control Id="CCPDbConnString" Type="Edit" X="20" Y="62" Width="150" Height="18" Property="CCPCONNECTIONSTRING" Indirect="no" />

Ранее в файле WXS был соответствующий тег свойства:

<Property Id="CCPCONNECTIONSTRING" Secure="yes" ></Property>

... А пользовательское действие LoadDefaultOptions перезаписывает сеанс var как это:

session["CCPCONNECTIONSTRING"] = <value parsed from file>;

Согласно журналам сеансов, это работает, как и ожидалось, синтаксический анализ xml работает, и установлены сеансовые переменные.

Моя проблема в том, что мой пользовательский диалог появляется, чтобы предложить пользователю эти сохраненные значения по умолчанию ПОСЛЕ запуска CustomAction LoadDefaultOptions. Кажется, что значения свойств ORIGINAL переменных сеанса застряли вместо того, чтобы перезаписываться пользовательским действием, которое загружало значения по умолчанию через файл xml и сохранил их в сеансе. (они пустые как их оригинальные свойства определены, или в случае, если я определяю их иначе, они показывают эти значения вместо записанных значений сеанса)

Как заставить диалоги "читать" переопределенные переменные сеанса CustomActions

В конечном итоге я хочу загрузить эти значения из конфигурации приложения и запросить их обратно. пользователю в необязательном диалоговом окне с выходным экраном (который работает так далеко, кроме получения обновленных сессий vars), а затем по команде это диалоговое окно, запустите другое пользовательское действие, чтобы переписать App.Config файл с настройками из пользовательского диалога ...

Я просто не могу передать сессионные переменные в PERSIST !!!

Есть идеи? я совершенно безосновательно пытаюсь использовать сеанс таким образом? как еще я могу проанализировать файл app.config и позволить пользователю установки изменить настройки приложения, если это не сеанс?

Ответы [ 2 ]

1 голос
/ 13 июля 2010

Очевидно, что часть того, что я пытаюсь сделать, более или менее невозможна ... Вы не можете изменить переменные сессии в InstallExecuteSequence для использования в диалогах ... это можно сделать только в InstallUISequence ...

Поэтому я не могу ПРОЧИТАТЬ И ЗАПРОСИТЬ ПОЛЬЗОВАТЕЛЕЙ ИЗ МОЕГО App.Config при первой установке, так как файл никогда не будет развернут в течение периода времени, который будет возможно сделать .... Кажется, единственный раз, когда это будет работать находится во время UPGRADE, где файл App.Config существует из предыдущей установки в том же месте, откуда произошла первоначальная установка.

Я собираюсь пойти на это с этой точки зрения, с НЕТ (или жестко заданными) настройками по умолчанию во время новой установки, с попыткой проанализировать и использовать в качестве настроек по умолчанию СУЩЕСТВУЮЩИЕ настройки app.config во время установки обновления. .. Это должно позаботиться о моих требованиях!

0 голосов
/ 09 июля 2010

Если вы запланируете свое настраиваемое действие после InstallFinalize, оно не будет выполняться с повышенными правами во время истории управляемой установки / типа UAC. У меня также есть вопрос, рассматривали ли вы перемещение этих данных конфигурации в приложение, где проще управлять ими как шаблоном первого запуска?

...