Как отлаживать пользовательское загрузочное приложение?
Я использую пакет 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?
Ответы
Ответ 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
)