Пользовательский интерфейс WiX 3.7 неправильно связывается

Новичок в WiX здесь... Я создал свой установочный пакет WiX, и он правильно устанавливает все функции. Затем я пытаюсь добавить к нему пользовательский интерфейс со следующим:

<UIRef Id="WixUI_Minimal" /> 
<UIRef Id="WixUI_ErrorProgressText" />

и я связываюсь с «light -ext WixUIExtension -cultures:en-us». Он находит это расширение, потому что выдаст ошибку, если я попробую его с несуществующим именем, но результирующий пакет msi имеет размер всего 30 КБ. Я предполагаю, что это должно быть немного больше, если расширение пользовательского интерфейса правильно связано?

Когда я запускаю msi, он просто показывает обычный индикатор выполнения и не требует дополнительного пользовательского интерфейса, который я ожидаю от WixUI_Minimal.

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


person Brendan Cook    schedule 11.04.2013    source источник
comment
Вы добавили ссылку на dll пользовательского интерфейса?   -  person Mihai Bratulescu    schedule 30.06.2014


Ответы (1)


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

UIRef должен находиться в ссылочном разделе. Первый раздел, с которого начинается компоновщик, — это элемент Product. Если ваш UIRef является дочерним элементом Product, то он обязательно будет связан. Затем компоновщик просматривает все ссылки в элементе Product (все, что заканчивается на Ref, является ссылкой, как и многие другие атрибуты), ищет необходимые элементы в других Fragment элементов. Затем компоновщик извлекает все из этих Fragment элементов. Например:

<Product>
   <DirectoryRef Id='TARGETDIR' />
</Product>

<Fragment>
    <Directory Id='TARGETDIR' Source='SourceDir' />

    <BinaryRef Id='icon' />
<Fragment>

<Fragment>
    <Binary Id='icon' Source='path\to\my.ico' />
</Fragment>

<Fragment>
   <UIRef Id='WixUI_Minimal' />
</Fragment>

В приведенном выше примере первые три раздела будут включены компоновщиком. Однако раздел с UIRef='WixUI_Minimal' опущен, потому что на него ничего не ссылается. Чтобы исправить это, UIRef можно было переместить на любой из других элементов Fragment.

Для проверки попробуйте переместить элемент UIRef в элемент Product. Если это не сработает, предоставьте в своем вопросе более подробную информацию о том, где находится ваш UIRef, чтобы мы могли помочь вам в дальнейшем.

person Rob Mensching    schedule 11.04.2013
comment
Эй, сегодня утром, начав с очень простого примера и пытаясь понять, что пошло не так, я понял, что именно так я пытался построить этот проект. У меня есть пакетный файл, в котором я дважды запускал его с помощью -arch x86, затем -arch x64, а затем связывал оба файла obj со своим собственным msi. Если я запускаю лайт, то свеча сразу на 32-битной даст мне правильный MSI с минимальным пользовательским интерфейсом. Но 64-битный все еще явно неверен. Можно создать 64-битный msi и связать его с WixUIExtension на 32-битной платформе, не так ли? - person Brendan Cook; 12.04.2013