Проблемы с загрузкой сборки сложно отлаживать, потому что при работе с управляемым и собственным кодом существует как минимум два уровня.
- Когда исполняемый файл запускается, собственный загрузчик должен найти файл, загрузить его в память вместе со всеми зависимыми библиотеками DLL, чтобы запустить его.
- Собственный загрузчик просматривает манифест сборки, чтобы определить эту информацию, а затем просто выслеживает все библиотеки DLL и загружает их в память (по порядку).
- Вы можете легко увидеть этот процесс, используя WINDBG, указав на EXE и запустив его из Windbg. Список загружаемых модулей - это работающий собственный загрузчик.
- Если зависимость представляет собой сборку управляемого кода .NET, то собственный загрузчик передает запрос загрузки непосредственно управляемому загрузчику, известному как «Fusion».
- Вы можете легко настроить программу просмотра FusionLOG, чтобы видеть, что происходит http://msdn.microsoft.com/en-us/library/vstudio/e74a18c4%28v=vs.100%29.aspx
- Сбои при загрузке либо на управляемом уровне, либо на управляемом уровне легко обнаруживаются либо с помощью WINDBG для собственного кода, либо с помощью Fusion Log View для управляемого кода.
Несколько советов по управляемой загрузке DLL: если сборка содержит ссылку на dll, которая не включена в эту сборку, существует строгий порядок «зондирования», которому следует следовать, чтобы найти dll. Будет сделано как минимум три попытки найти библиотеки DLL в разных местах, например, в сборке, в корневом пути программы и в GAC. Если три попытки завершились неудачно, загрузка останавливается на этом этапе и программа не запускается. Когда это происходит, это часто считается экологической проблемой системного уровня; однако на самом деле это проблема программирования, потому что до тех пор, пока системные требования не будут полностью известны системному администратору, он не сможет догадаться об этом. Если вы программист, который включает другие зависимые библиотеки DLL, вам всегда следует подумать, стоит ли размещать их в сборке, чтобы решить эту проблему. В противном случае вам, системным администраторам и людям, использующим вашу программу, придется ждать, пока не будет определена основная причина, что займет много времени.
Вы можете сказать, что другой отдел сказал мне использовать эту dll, и я понятия не имею, каковы другие зависимости! Это не оправдание, поскольку есть отличные инструменты, такие как ILDASM, и даже средства обхода зависимостей управляемого кода, которые расскажут вам все, что нужно. Лучший способ упаковать эти «другие» библиотеки DLL - просто включить их в вашу сборку.
person
JWP
schedule
18.12.2014
msiexec /i "MyVSTOOutlookInstaller.msi" /l*v "log.log"
- пожалуйста, обновите свой вопрос, добавив эту дополнительную информацию. - person Jeremy Thompson   schedule 13.12.2014!Analyze
в дампе может дать вам подсказку относительно модуля, в котором произошло первое / второе случайное исключение. Это то, о чем я спрашивал, как вы можете WinDBG сбой установщика без частных символов, но копаться в дампе - это допустимый момент - person Jeremy Thompson   schedule 18.12.2014!CLRStack
и следить за стеком вызовов, чтобы показать OP дымящийся пистолет. Тебя не волнуют даже тела методов. btw Я почти уверен, что msiexec не управляется, поэтому SOS не поможет. Но теперь я понимаю, как можно получить приблизительное представление о том, что ломается во время установки с помощью WinDBG :) И вы правы без журналов, о которых мы все здесь догадываемся !! - person Jeremy Thompson   schedule 18.12.2014