
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.21] |
![]() |
|
![]() |
|
|
Установлена чистая Windows XP. Без каких-либо обновлений и сторонних программ.
Пробую запустить свою MFC-программу и получаю такую ошибку: Приложение небыло запущено, поскольку оно некорректно настроено. Повторная установка этого приложения может решить эту проблему. Но ведь моя программа без проблем работает на "обновленных" Windows XP! Что подскажете? |
![]() |
Сообщ.
#2
,
|
|
значит приложение было собрано с настройкой
Use of MFC -> Use MFC in a Shared DLL поставишь Use MFC in a Static DLL и всё должно быть нормально |
Сообщ.
#3
,
|
|
|
Да, было так собрано для того, чтобы узнать какие DLL-ки нужны программе.
Т.е. при запуске Windows должна была бы выводить сообщение, что такая-то DLL не найдена, а тут вместо этого... Мне это нужно для того, чтобы узнать какие DLL использует программа. |
Сообщ.
#4
,
|
|
|
Цитата Vladimir_ @ Мне это нужно для того, чтобы узнать какие DLL использует программа. А чо Dependency Walker не подходит? Он С MSVS в комплекте идет вроде (Depends.Exe) |
Сообщ.
#5
,
|
|
|
Цитата Vladimir_ @ Т.е. при запуске Windows должна была бы выводить сообщение, что такая-то DLL не найдена, а тут вместо этого... Тут дело не в конкретной dll, а в версиях используемых в программе CRT и MFC, прописанных в манифесте проги. Если загрузчик не находит папку с dll-ками указанной версии (в XP они хранятся в ..\Windows\WinSxS - отдельно для CRT, ATL, MFC и т.п.), то выдает соотв-е сообщение, не разбираясь и не сообщая какие конкретно dll требуются Цитата Vladimir_ @ Мне это нужно для того, чтобы узнать какие DLL использует программа Ну вот и глянь в ..\Windows\WinSxS, что входит в стандартные комплекты CRT и MFC |
Сообщ.
#6
,
|
|
|
Цитата KILLER @ Цитата Vladimir_ @ Мне это нужно для того, чтобы узнать какие DLL использует программа. А чо Dependency Walker не подходит? Он С MSVS в комплекте идет вроде (Depends.Exe) У себя на диске не нашел ![]() Скачал с сайта http://www.dependencywalker.com/ Добавлено Цитата leo @ Ну вот и глянь в ..\Windows\WinSxS, что входит в стандартные комплекты CRT и MFC Длинный списочек ![]() |
Сообщ.
#7
,
|
|
|
Уже ради эксперимента скопировал все DLL из обновленной Windows, которые выдает Depends в каталог программы, но ничего не поменялось
![]() Похоже придется ставить Visual Studio 2003, т.к. при сборке 2008 скорей всего надо какое-то обновление Windows..., хотя если статически линковать MFC, то все работает. Собрал пустой MFC-проект - симптомы те же ![]() Может кто еще чего подскажет? |
Сообщ.
#8
,
|
|
|
Может, потому что их надо не просто копировать а соответствующим образом устанавливать, чтобы они оказались в WinSxS в нужном месте? Для этого надо либо скачать редист (Microsoft Visual C++ 2008 Redistributable Package (x86)/Microsoft Visual C++ 2008 SP1 Redistributable Package (x86)/Microsoft Visual C++ 2008 Redistributable Package (x64)), либо, если используешь MSI-based инсталлятор то для него где-то в Program Files\Common Files\Merge Modules (для VC++2005 так) должны быть соотв. msm-модули.
Цитата Vladimir_ @ скопировал все DLL из обновленной Windows Ты надеюсь не копировал такие DLL как user32.dll, kernel32.dll и т.д., а только mfc* msvcr* msvcp* atl*? ![]() |
Сообщ.
#9
,
|
|
|
Цитата mitrich @ Может, потому что их надо не просто копировать а соответствующим образом устанавливать, чтобы они оказались в WinSxS в нужном месте? Для этого надо либо скачать редист (Microsoft Visual C++ 2008 Redistributable Package (x86)/Microsoft Visual C++ 2008 SP1 Redistributable Package (x86)/Microsoft Visual C++ 2008 Redistributable Package (x64)), Скачал, установил - все заработало! Спасибо! Уже теплее... Скачал ProcessMonitor, восстановил Windows, буду пробовать вычислять чего редист делает... |
Сообщ.
#10
,
|
|
|
Посмотрел через ProcessMonitor что делает редист - здесь долго разбираться... ограничен во времени.
В принципе устраивает: если такая проблема (см. 1-й пост), то устанавливаем редист и все. Ну может быть потребуется какая-нибудь особая длл, но это уже мелочь... Все равно для меня пока осталась загадка, что делает компоновщик при сборке со статической MFC, ведь тогда все работает и редист не нужен. Т.е. реестр отпадает. А можно как-то узнать чего подключается в случае статической MFC? Похоже я всетаки какую-то длл пропустил... |