Я получаю error 2803: dialog view did not find a record for the dialog
. Это потому, что я явно удалил диалог FilesInUse
моего установщика. Это диалоговое окно, которое иногда запрашивается для представления msiexec
, когда есть блокировки файлов. Моя логика установки явно не пытается показать это диалоговое окно. У моего установщика есть пользовательские действия для уничтожения процессов, которые блокируют файлы, поэтому никогда не возникает проблем с игнорированием этого сообщения, а затем с установкой (но для этого завершения процесса мне нужны разрешения и, следовательно, отложенное настраиваемое действие, которое должно запускаться после диалога запрашивается). Этот диалог практически бесполезен для всех моих целей и целей. Вместо того, чтобы показывать фатальное диалоговое окно ошибки, когда этот код ошибки представляет себя, как я могу подавить этот код ошибки? Кто-нибудь знает, есть ли способ сделать это в WiX, возможно, в форме специального действия C# или что-то еще? Любой способ улавливать и обрабатывать коды ошибок?Подавить код ошибки MSI
ответ
Я не думаю, что вы можете подавить эту ошибку, если только вы не готовы использовать свой собственный интерфейс и игнорировать запросы диалогового окна FilesInUse. Или измените код WiX, если это разрешено. В основном вы будете получать сообщения и реагировать (или нет) к ним:
https://msdn.microsoft.com/en-us/library/aa370573(v=vs.85).aspx
Вы бы возвращал ответ игнорировать вместо того чтобы показывать диалоговое окно.
Можете ли вы использовать загрузчик, который поднимается при запуске и запускает MSI? В этом случае вся установка повышается, и ваши ЦС повышаются, когда они запускаются до InstallFinalize, даже если они являются незамедлительными.
Если это ваши приложения, то другим решением было бы интегрировать их с Restart Manager, чтобы они сказали закрыть, с добавленной функцией, что они могут сохранять состояние и при необходимости восстанавливать его. Вам не нужны ваши центры сертификации.
Ваш ответ был очень полезным, и я хотел сказать спасибо, потому что вы пролили свет на некоторые прекрасные идеи, которые принесут пользу тем, у кого есть те же проблемы. – Alexandru
В конце концов я обошел его, постоянно запрашивая у пользователя CA перед InstallValidate, который говорит пользователям останавливать приложения, такие как Outlook, Excel, Word и т. Д., В которых размещены некоторые из надстроек Office установщика. Как только они опущены, я сигнализирую о приостановке нашего приложения в лотке. Поскольку процесс умирает, 'msiexec' больше не отображает диалоговое окно« FilesInUse ». В стороне, я понял, что мне действительно не нужно быть поднятым, чтобы все это сделать. Я смог проверить ключи реестра с помощью тегов RegistrySearch в «Product.wxs», а также проверить и завершить активные процессы в качестве текущего пользователя. – Alexandru
Если вы когда-нибудь обойдетесь, чтобы приложения сделали это для себя, посмотрите на вызов Restart Manager RegisterApplicationRestart(). – PhilDW