Пользовательская операция отладки WIxsharp в консоли - PullRequest
0 голосов
/ 18 октября 2018

У меня есть проект настраиваемого действия, который компилируется в .dll, я хочу иметь возможность выполнять свои настраиваемые действия, я знаю, что пакет можно изменить на wixsharp.bin, но это не очень практично.Несмотря на это, я все еще пробовал этот метод, но он не достиг моих точек останова.

Wix использует: System.Diagnostics.Debugger.Launch();, который запускает действие в отладке, это не похоже на работу для wixsharp, но его ожидаемый результат - то, чтоя пытаюсь достичь.

Я видел, что debug.assert можно использовать для отладки, и я также видел ссылки на #if DEBUG #endif Как правильно отлаживать?

    [CustomAction]
    public static ActionResult CustomAction(Session session)
    {
        Debug.Assert();
        MessageBox.Show("Hello World!" + session[IISSessions.AppPoolName], "External Managed CA");

        return ActionResult.Success;
    }

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Не совсем уверен, что вызвало проблему, я удалил папку bin, а затем запустил сборку, и теперь она, кажется, работает.System.Diagnostics.Debugger.Launch() работает правильно, его нужно поместить в #if DEBUG, как сказал @Stein Åsmul.После сборки в DEBUG запустите выходной MSI-файл, вам будет предложено открыть экземпляр Visual Studio, когда вы нажмете свое пользовательское действие во время установки.

   [CustomAction]
    public static ActionResult CustomAction(Session session)
    {

    #if DEBUG
            System.Diagnostics.Debugger.Launch();
    #endif
            MessageBox.Show("Hello World!" + session[IISSessions.AppPoolName], "External Managed CA");

            return ActionResult.Success;
     }
0 голосов
/ 18 октября 2018

NB! : я не использую WixSharp, но приведенное ниже описание должно быть общим.По крайней мере, некоторые из них.

Отладка пользовательских действий : я просто следую этой процедуре (поскольку я обычно использую собственный код):

  1. Скомпилируйте отладочные двоичные файлы и включите в пакет.
  2. Отобразите окно сообщения из настраиваемого действия.
  3. Используйте Visual Studio, чтобы присоединиться к процессу, отображающему диалоговое окно.
    • Вы присоединяетесь к msiexec.exe для собственного неуправляемого кода и к rundll32.exe для управляемого кода. Системный контекст или Пользовательский контекст Процесс в зависимости от того, как выполняется настраиваемое действие.
    • Установите точку останова в коде сразу после диалогового окна и дайте ему ударить.
    • Это должно работать при условии, что ваш исходный код совпадает с тем, что находится в ваших двоичных файлах отладки в пакете (символы отладки).

How-ToВидео : есть видео от Advanced Installer , показывающее большую часть процесса: Отладка C # Пользовательские действия .Это очень хорошо.


В последнее время эта проблема много всплывала, последний раз в этот вопрос / ответ, раздел 4 .

Вот некоторые проблемыно хороший контент по теме от installsite.org : Отладка пользовательских действий .


Я провел тест по вашему собственному предложениючтобы убедиться, что он работает и для обычной установки WiX (#if DEBUG делает код применим только к отладочным сборкам):

#if DEBUG
   System.Diagnostics.Debugger.Launch();
#endif

Другая упомянутая вами команда также работает для меня:

Debug.Assert(false);

Основная задача - убедиться, что верная версия DLL входит в MSI.Если вы не видите ожидаемого поведения, попробуйте вручную вставить версию dll (отладка или выпуск), с которой вы собираетесь работать, в MSI, используя Orca или другой инструмент редактора MSI - просто чтобы убедиться, что там есть нужный двоичный файл.Я не знаю, как это настроить в WixSharp.


Для справки : Отладка пользовательских действий

C++ debugging:

Managed Code (в дополнение к вышеуказанному):


Некоторые ссылки (для безопасного хранения):

...