Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.133.79.70] |
|
Сообщ.
#1
,
|
|
|
Здравствуйте, столкнулся со следующей проблемой.
Пишу инсталлятор на WiX 3.8 Есть Custom Action который выполняется после окончания установок сервисов. Выполняет ряд проверок и результат выводит в диалог Он вызывается так: <CustomAction Id="CheckAction" BinaryKey="CustomActions.CA.dll" DllEntry="Check" Execute="immediate" Impersonate="no"/> <Binary Id="CustomActions.CA.dll" SourceFile="..\CustomActions\bin\$(var.Configuration)\CustomActions.CA.dll" /> <InstallExecuteSequence> <Custom Action="CheckAction" After="InstallFinalize" >NOT Installed</Custom> </InstallExecuteSequence> В коде Custom Action он на C# я записываю значение свойства session["TEST"] = "TestValue"; для отображения в диалоге <Control Id="TextId" Type="Text" X="255" Y="75" Width="80" Height="15" Property="TEST" Text="[TEST]" /> При отладке в Custom Action попадаю, ошибок нет. В лог файле есть запись PROPERTY CHANGE: Adding TEST property. Its value is 'TestValue'. Однако при загрузке диалога ничего не отображается. Как с этим бороться? Если Custom Action вызывать из <InstallUISequence> то значение записывается и отображается, но <InstallUISequence> нельзя запланировать After="InstallFinalize". |
Сообщ.
#2
,
|
|
|
Цитата narita @ но <InstallUISequence> нельзя запланировать After="InstallFinalize". но никто же на запретит тебе сделать свой финальный диалог (sequence == -1) |
Сообщ.
#3
,
|
|
|
Не понял. Не могли бы вы поподробней написать как вытащить значение свойств?
Экшен тяжелый выполняется несколько минут, поместив его в <InstallExecuteSequence> он запускается сразу после запуска сервисов, и вываливает в статус то, что сейчас делает. После этого появляется финальный диалог. Ему поставить sequence == -1 ? Если вызов экшена поместить в диалог и привязать к кнопке Install <InstallUISequence> <Custom Action="CheckAction" After="InstallFinalize" >NOT Installed</Custom> </InstallUISequence> я получаю ошибку ..\MvmServerInstaller\MyVerifyReadyDlg.wxs(23): error LGHT0094: Unresolved reference to symbol 'WixAction:InstallUISequence/InstallFinalize' in section 'Fragment:'. Добавлено Да, еще хочу уточнить, мы один и тот же sequence имеем ввиду? Мой финальный диалог. <Publish Dialog="MyExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999">-1</Publish> |
Сообщ.
#4
,
|
|
|
Цитата narita @ Не могли бы вы поподробней написать как вытащить значение свойств? Насколько я понимаю, значение свойств ты и так вытаскиваешь Так что тут мои пояснения не нужны Цитата narita @ Экшен тяжелый выполняется несколько минут, поместив его в <InstallExecuteSequence> он запускается сразу после запуска сервисов, и вываливает в статус то, что сейчас делает. Ну вот и чудненько. Пусть там и остается Единственное что стоит подумать immediate это кастом экшен или таки deferred, но это ты, судя по всему, уже решил Цитата narita @ После этого появляется финальный диалог. Ему поставить sequence == -1 ? Финальный диалог уже существует и его sequence уже -1 Этот диалог встраивается виксом автоматически. Но ты можешь либо заменить этот диалог на свой, либо видоизменить виксовый диалог. Если будешь заменять встроенный виксовый диалог, то у тебя будет что-то вроде такого: <InstallUISequence> <Show Dialog="MyExitDialog" OnExit="success" /> </InstallUISequence> Цитата narita @ Да, еще хочу уточнить, мы один и тот же sequence имеем ввиду? В InstallUISequence есть только одна колонка sequence |
Сообщ.
#5
,
|
|
|
У меня переписан финальный диалог. На него добавлено несколько контролов типа текст, в них я хочу увидить что записалось в свойства, когда выполнялся CustomAction.
Печаль в том, что когда появляется финальный диалог ничего не отображается. Пробовал добавить ему кнопку Далее, и вывести их на следующем диалоге, но тоже безрезультатно. Добавлено и да, если добавить к <InstallUISequence> <Show Dialog="MyExitDialog" OnExit="success" Overridable="yes" Sequence="-1"/> </InstallUISequence> сначала ругается на конфликт OnExit и Sequence MyExitDialog.wxs(44): error CNDL0071: The sequence number for a Show element can be specified at most once, with either a 'Sequence' or 'OnExit' attribute, but not both. потом ругается на отрицательное значение в Sequence MyExitDialog.wxs(44): error CNDL0123: The Show/@Sequence attribute's value, '-1', is not in the range of legal values. Legal values for this attribute are from 1 to 32767. |
Сообщ.
#6
,
|
|
|
Цитата narita @ Печаль в том, что когда появляется финальный диалог ничего не отображается. хмм.... странно... я надеюсь все твои устанавливаемые проперти public? попробуй добавить их в SecureCustomProperties. Если не поможет, то объяви их в Property table. В конце инсталляции в логе пишется список пропертей. Там есть устанавливаемые тобой проперти? Добавлено Цитата narita @ и да, если добавить к убери Sequence="-1" Цитата narita @ The sequence number for a Show element can be specified at most once, with either a 'Sequence' or 'OnExit' attribute, but not both. Номер в очереди для элемента Show может быть установлен только один раз либо аттрибутом 'Sequence' либо 'OnExit', но не обоими. Цитата narita @ The Show/@Sequence attribute's value, '-1', is not in the range of legal values. Legal values for this attribute are from 1 to 32767. Значение атрибута Sequence должно быть положительным. |
Сообщ.
#7
,
|
|
|
Спасибо за то, что уделяете мне время
Цитата Fester @ хмм.... странно... я надеюсь все твои устанавливаемые проперти public? Заглавными буквами при добавлении значения session["TEST"] = "TestValue"; и при добывани <Control Id="TextId" Type="Text" X="255" Y="75" Width="80" Height="15" Text="[TEST]" /> Цитата Fester @ попробуй добавить их в SecureCustomProperties. добавляю так <Wix> <Fragment> <UI> <Property Id="TEST" Secure="yes" ></Property> <Dialog Id="MyExitDialog" Width="370" Height="270" Title="!(loc.ExitDialog_Title)"> ... <Control Id="TextId" Type="Text" X="255" Y="75" Width="80" Height="15" Text="[TEST]" /> </Dialog> <InstallUISequence> <Show Dialog="MyExitDialog" OnExit="success" Overridable="yes" /> </InstallUISequence> <AdminUISequence> <Show Dialog="MyExitDialog" OnExit="success" Overridable="yes" /> </AdminUISequence> </UI> </Fragment> </Wix> не помогло ( Пробовал объявлять их в Product.wxs, тоже не помогло. Цитата Fester @ Если не поможет, то объяви их в Property table. <SetProperty Id="TEST" Before="CheckAction" Value="TT" Sequence='execute'></SetProperty> так правильно делать? вот лог Действие закончено 13:32:09: InstallFinalize. Код возврата 1. MSI (s) (F4:28) [13:32:09:472]: Doing action: SetTEST MSI (s) (F4:28) [13:32:09:472]: Note: 1: 2205 2: 3: ActionText Действие 13:32:09: SetTEST. Начало действия 13:32:09: SetSTEST. MSI (s) (F4:28) [13:32:09:479]: PROPERTY CHANGE: Adding TEST property. Its value is 'TT'. Действие закончено 13:32:09: SetTEST. Код возврата 1. после чего это значение было перезаписано из CustomAction MSI (s) (F4!68) [13:32:15:398]: PROPERTY CHANGE: Modifying TEST property. Its current value is 'TT'. Its new value: 'Пройдено'. ну и в результате всего вывалило список всех пропертей, в том числе и наше Property(S): TEST = Пройдено В диалоге попрежнему пусто, почему-то не вываливает в него |
Сообщ.
#8
,
|
|
|
Цитата narita @ Пробовал объявлять их в Product.wxs, тоже не помогло. так: <Property Id="TEST" Secure="yes" /> ? Для добавления в Property table: <Property Id="TEST" Secure="yes" Value="Не пройдено" /> Цитата narita @ так правильно делать? Это ты делаешь кастом экшен. Это не то Кстати, если ты вместо [TEST] подставить, скажем, [ProductName], то показывается? |
Сообщ.
#9
,
|
|
|
Цитата Fester @ так: <Property Id="TEST" Secure="yes" /> ? да, так. ничего не выходило. объявляем в property table <Property Id="ISANYFILESCOMING" Secure="yes" Value="c"></Property> вот лог MSI (s) (F4!74) [15:02:34:770]: PROPERTY CHANGE: Modifying ISANYFILESCOMING property. Its current value is 'c'. Its new value: 'Не Пройдено'. в диалоге выводит "с". Я пробовал добавлять это свойство на несколько страниц, с переключением далее - оно не меняется, остается 'c'. Цитата Fester @ Кстати, если ты вместо [TEST] подставить, скажем, [ProductName], то показывается? да, выводит реальный ProductName |
Сообщ.
#10
,
|
|
|
Почему-то значения записаные в свойства во время инсталляции сохраняют старые значения при чтении их после установки..
|
Сообщ.
#11
,
|
|
|
А есть ли какой-нибудь другой способ вывести текст в диалог из CustomAction?
|
Сообщ.
#12
,
|
|
|
http://windows-installer-xml-wix-toolset.6...-td7228066.html
Насколько я понял нельзя получить значения свойств, которые записаны в CustomAction, вызванном из <InstallExecuteSequence> после InstallFinalize. Поэтому после установки сервсов надо вешать экшн на кнопку и вызывать в <InstallUISequence> и ждать.., тогда в следующем диалоге можно будет увидеть заполненные результатами свойства. Либо выполнять экшн в <InstallExecuteSequence> а по окончанию установок открывать заполненный текстовый файл. |