Включение измененного диалога FilesInUse в проект WIX

У меня есть модифицированный диалог FilesInUse. Просто включение его в проект и изменение ссылки в пользовательском интерфейсе не помогает - я получаю сообщение об ошибке «ICE20: стандартный диалог:« FilesInUse »не найден в таблице диалога» при создании проекта установки.

Прошерстив сеть, я нашел один совет - подавить валидацию ICE для ICE20. Ну, сборка проекта с такими настройками работает нормально, и msi тоже нормально работает, но я не уверен, что это хорошее решение проблемы.

Другой совет состоял в том, чтобы изменить FilesInUse и удалить WixUIExtension из ссылок, но, насколько я знаю, таким образом я закончу копированием всех необходимых диалоговых файлов в свой проект. Этого я хотел бы избежать.

Итак, что можно сделать, чтобы правильно включить мой пользовательский FilesInUse в проект WIX?


person 26071986    schedule 13.11.2010    source источник


Ответы (5)


См. соответствующий вопрос и ответы здесь: диалог замены WiX

Пользователь Ян Скляренко ответил 25 марта 2011:

Пара статей вам в помощь:

Руководство по WiX

статья Нила Слейтхольма

Там вы найдете всю необходимую информацию по вашему делу.

Пользователь Боб Арнсон ответил 25 марта 2011 года:

См. «Изменение последовательности пользовательского интерфейса встроенного набора диалоговых окон» в разделе «Настройка встроенных наборов диалоговых окон WixUI» в WiX.chm.

person Rami A.    schedule 04.05.2011

Вы можете использовать пользовательский диалог FilesInUse следующим образом:

<Fragment>
<UI>
  <Dialog Id="FilesInUse" Width="370" Height="270" Title="Your product name">
    <Control Id="Retry" Type="PushButton" X="304" Y ="243" Width="56" Height="17" Text="Retry" Default="yes" Cancel="yes">
      <Publish Event="EndDialog" Value="Retry">1</Publish>
    </Control>
    <Control Id="Ignore" Type="PushButton" X="235" Y ="243" Width="56" Height="17" Text="Ignore">
      <Publish Event="EndDialog" Value="Ignore">1</Publish>
    </Control>
    <Control Id="Exit" Type="PushButton" X="235" Y ="243" Width="56" Height="17" Text="Exit">
      <Publish Event="EndDialog" Value="Exit">1</Publish>
    </Control>
    <Control Id ="InUseFiles" Type="ListBox" Width="300" Height="150" X="30" Y ="60" Property="FileInUseProcess" Sorted="yes" TabSkip="yes" />
  </Dialog>
</UI>
</Fragment>

Вам просто нужно сослаться на этот диалог в свой собственный установочный диалог с тегом

<DialogRef Id="FilesInUse" />

Все упомянутые теги являются частью требований к диалогу ICE20.

Надеюсь это поможет. Хорошего дня.

person Hahn    schedule 20.12.2013
comment
Не работает для меня. Приходится подавлять проверку ICE для ICE20 - person Farrukh Waheed; 03.01.2014

Хорошо, я просто потратил некоторое время, пытаясь понять, как решить эту проблему.

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

Видите ли, проблема в том, что MSI использует диалог FilesInUse автоматически, поэтому, если вы попытаетесь каким-либо образом изменить его, вы получите такие ошибки, как FilesInUse, не существующий в таблице диалогов, или дублирует диалог FilesInUse в таблице, если вы ссылаетесь на свой пользовательский диалог из других файлов.

Решение, которое я нашел работающим, заключалось в том, чтобы вообще не использовать DialogRef для диалогового окна FilesInUse Wix, а сделать свой собственный диалог в основном файле пользовательского интерфейса (где я обычно помещал бы DialogRef в FilesInUse) и назвать его FilesInUse.

Надеюсь, это поможет другим людям, имеющим ту же проблему.

person Dejan Maksimovic    schedule 04.05.2012
comment
Не работает для меня. Приходится подавлять проверку ICE для ICE20 - person Farrukh Waheed; 03.01.2014

При сборке из командной строки: light.exe -sice:ICE20...

Если вы работаете в Visual Studio: щелкните правой кнопкой мыши свой проект установки, выберите «Свойства», выберите «Настройки инструмента» в левой части экрана, добавьте «ICE20» в поле «Подавить конкретную проверку ICE:».

person Bill    schedule 22.01.2020

Еще одна проблема заключается в том, что настраиваемое диалоговое окно FilesInUse не будет отображаться при нажатии кнопки «Удалить» в «Программы и компоненты», поскольку удаление выполняется с UILevel 3, поэтому будет отображаться только встроенное диалоговое окно FilesInUse.

Чтобы обойти это, включите это в свой product.wxs:

<Property Id="ARPNOREMOVE" Value="1" />

Затем, когда пользователи нажимают кнопку «Изменить» (или «Изменить») в «Программах и компонентах», в диалоговом окне «Обслуживание» будет кнопка «Удалить», которую они могут использовать для удаления, и будут отображаться настраиваемые диалоговые окна. Такие продукты, как Visual Studio, имеют только кнопку «Изменить/изменить».

Еще одна вещь заключается в том, что приложения и функции (Windows 10) отключат кнопку «Изменить», если ключ «Удалить» не имеет параметра ModifyPath. Он должен быть установлен на

MsiExec.exe /I{<yourproductcode>}

Ваш загрузчик должен будет сделать это. Не уверен, что MSI может его установить.

person Kevin Mackey    schedule 19.07.2018