2015-09-09 6 views
0

У меня есть проект установки, созданный с помощью установщика визуальной студии. Я установил некоторые пользовательские действия, которые запустит мой пользовательский установщик WPF после копирования файлов для дальнейшей установки. Но у меня есть 2 проблемы:Проект установки установщика Visual Studio выполняет откат от пользовательского действия

  1. Даже если я отключил все окна, есть еще немного полоса загрузки от MSI, которая остается позади моего процесса WPF, что я начиная с пользовательских действий (не то большое сделка, я могу с этим справиться). Уровень пользовательского интерфейса - 3, а один из тихих установок - 2 (что является минимальным). Мне было интересно, есть ли способ установить уровень UI по умолчанию на 2 (без колебаний, даже если пользователь дважды щелкает мышью)

  2. Это самая большая проблема: пользовательское действие запускает мой процесс WPF и ждет для выхода. Если пользователь отменяет установку (нажимает кнопку X в WPF), WPF выйдет с определенным кодом выхода, который я поймаю в своем настраиваемом действии. Теперь мне нужен способ выполнить откат от моего пользовательского действия в этом случае. Единственный способ, которым я нашел, - это выбросить исключение. Но тогда пользователь увидит уродливое диалоговое окно из msi с исключением, и я определенно этого не хочу. Могу ли я заставить откат каким-то образом не бросать исключение? Или, по крайней мере, скрыть пользовательский интерфейс msi?

Примечание: пользовательское действие, я использую это Committed событие, потому что мне нужно все файлы, которые будут копироваться (включая некоторые сборки в GAC) для моего WPF работать.

Я нашел пару ответов на stackoverflow, но ни один из них не был полезен. Ближайший один был таким:

Similar question

Спасибо

ответ

0

Вы говорите, что у вас есть пользовательское действие, которое начинается ваша WPF программы, но вы не говорите, что это код, является ли NET, VBScript , C++ и т. Д. Если это то, что бросает исключение, вы должны показать код thaqt.

Если это управляемый код, вы бросаете сообщение InstallException с вашим сообщением, так это то, как они работают, потому что CA с управляемым кодом не являются родными для установщика Windows, поэтому есть прокладка Dll, которая имеет дело с материалом.

Если ЦС, который вызывает вашу программу WPF, является C++ или VBScript, тогда существует API для отображения вашего собственного сообщения MsiProcess4essage или session.message.

Вообще-то я не верю, что вы можете заставить откат и подавить все сообщения - сообщение всегда создается. Кажется недружелюбным полностью отменить удаление и удалить все, не сказав, что происходит.