Подтвердить что ты не робот

Как отлаживать пользовательское загрузочное приложение?

Я использую пакет Burn для MSI. Я использую Votive (Visual Studio) и свой собственный BA вместо WiXBA. Я попытался отладить пользовательский BA с помощью Debugger.Launch(). Но когда я начинаю отладки, появляются сообщения об ошибках.

Никакие символы не загружаются для любого стека стека вызовов. Исходный код не отображается

Я понял, что package.exe связывает CustomBA dll, который находится в C:\Documents and Settings\user\Local Settings\Temp\{GUID}\. {GUID} всегда изменяется. Итак, всякий раз, когда я запускаю package.exe, всегда изменяется каталог.

Я думаю, что это причина возникновения ошибок.

В Visual Studio, когда я запустил package.exe с dll CustomBA, который находится на абсолютном пути (.../Debug/bin/CustomBA.dll). Но после выполнения package.exe он ссылается на каталог Local Settings\Temp\{GUID}. Итак, когда мы начинаем отладку и прикрепляем к dll CustomBA, каталог dll CustomBA динамически изменяется и возникает ошибка No symbols are loaded.

  • Почему package.exe связывает dll, который находится в C:\Documents and Settings\user\Local Settings\Temp\{GUID}\? Можем ли мы выбрать путь для dll статически?
  • Если мы не можем выбрать путь dll статически, как я могу использовать отладку функции для CustomBA?
4b9b3361

Ответ 1

Чтобы отладить приложение Bootstrapper, вам понадобятся оба Bundle.wixproj и BA.csproj(или .vcxproj, если вы делаете родную .dll) в том же решении, и проект Bundle должен зависеть от BA проект, так что перестройки работают правильно. Следующие шаги должны позволить вам войти в ваш код.

Примечание. Убедитесь, что вы не используете Visual Studio. Если вы отключили UAC, снова включите его. Эти шаги не будут работать правильно, если Visual Studio работает с повышенным уровнем.

  • Восстановите проект. Это гарантирует, что у вас есть Bundle, созданный с обновленным BA.dll внутри него.
  • Щелкните правой кнопкой мыши на BA.csproj в обозревателе решений и выберите Set as StartUp Project. BA.csproj должен быть полужирным.
  • Щелкните правой кнопкой мыши на BA.csproj и выберите Properties.
  • На Properties для BA.csproj выберите вкладку Debug.
  • На вкладке Debug выберите радиокнопку Start external program
  • Перейдите к пути, где построен ваш пакет.

Теперь вы можете нажать F5 и начать отладку. Помните, что в любое время, когда вы меняете BA.csproj, вам также необходимо обеспечить переустановку Bundle.wixproj. В противном случае, Bundle запустится со своим старым BA в нем, и отладчик обнаружит, что недавно созданный BA.pdbs не соответствует.

Дополнительный кредит: если вы отключите Just My Code в настройках отладчика и загрузите файлы pdbs.zip и sources.zip для соответствующей сборки вашей установки WiX, вы можете на самом деле выполнить код записи, а также свой BA, чтобы увидеть как все работает вместе.

Ответ 2

Я следил за предложением Rob в этом сообщении, но, к сожалению, я не мог заставить его работать для меня (Visual Studio 2015, Wix 3.10.3, управляемое приложение Bootstrapper, используя WixWPF). Никаких контрольных точек никогда не ударяют. Я заметил, что отладчик присоединяется к неправильному процессу, у установщика есть два запущенных процесса (im, угадывающий BA и Bundle). Когда я изменил процесс, точки останова были поражены, но мой управляемый BA имел код, который я хочу отлаживать, прежде чем отладчик действительно привязан.

Мне удалось найти решение, в котором приложение не будет запускаться до тех пор, пока не будет добавлен отладчик. Я поместил этот код в свой файл кода конструктора (в блоке DEBUG) для моего управляемого BA, как это...

public MainWindow()
{
#if DEBUG
    // Do not start until debugger attached
    while(!System.Diagnostics.Debugger.IsAttached)
    {
        System.Threading.Thread.Sleep(1000);
    }
#endif
    InitializeComponent();
    InstallData = new InstallerInfo();
}

Теперь, когда я скомпилирую мое управляемое приложение Bootstrapper (с Debug) вместе с Bundle и запустим его, приложение не запустится, пока вы не присоединитесь к управляемому приложению Bootstrapper Tools > Attach to Process > Find your exe in the list.

Ответ 3

Вы не можете запускать свой собственный BA в режиме отладки из Visual Studio.

Что вы можете сделать, так это запустить сгенерированный exe файл, а затем присоединить Visual Studio к процессу, который позволит вам его отладить. (В меню: Tools > Attach to Process > Find your exe in the list)