| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > не работает exe под Win XP |
| Автор: Artemon 26.2.2010, 09:54 |
| Собираю программу на Windows server 2003 + VS2005 + Qt 4.3 Все нормально собирается и работает. Переношу программу на машину с XP - вылетает ошибка "приложение корректно настроено, повторная установка поможет исправть проблему". В чем может быть проблема ? |
| Автор: zayacnk 26.2.2010, 10:31 |
| Посмотри эту тему, может поможет: http://forum.vingrad.ru/forum/topic-233481.html |
| Автор: Artemon 26.2.2010, 13:57 |
| когда собираю на WinXP и переношу программу на Windows Server 2003 - работает нормально. А когда делаю наоборот - не работает Добавлено через 2 минуты и 39 секунд На обоих пк стоит VS2005 и Qt 4.3 |
| Автор: NewDima 26.2.2010, 14:00 |
| Artemon, попробуйте на другой машине с XP |
| Автор: chaos 26.2.2010, 14:00 |
| msvc*.dll каких-нибудь не хватает |
| Автор: Artemon 26.2.2010, 17:13 |
| Нет друзья, боюсь что вы не поняли. Обе машины - девелоперские, на обоих есть все необходимые библиотеки. Если делаю компиляцию программы на машине с WinXP (также включаю все библиотеки crt, manifest) и переношу на машину с Win2003, то все работает отлично. Если делаю компиляцию программы на машине с Win2003 (также включаю все библиотеки crt, manifest) и переношу на машину с WinXP (хоть девелоперскую, хоть чистую) - вылетает сообщение об ошибке. Вообще у меня сервер, который по-ночам делает сборки программ - основан на Win2003, отсюда мне и нужно чтобы сборки с него работали и на XP. |
| Автор: borisbn 26.2.2010, 21:45 |
| пробовал не брать с win2003 crt и manifest, а просто установить vcredist на target компьютере с winXP ? У меня точно такие же средства, только QT 4.4.3 (но думаю это не важно) и всё работает |
| Автор: Artemon 27.2.2010, 08:11 |
| Смысл устанавливать vcredist, если уже стоит VS2005 ? |
| Автор: W4FhLF 27.2.2010, 08:27 |
| Ну заюзай dependency walker, может всё-таки в версиях где-то разошлись. Либо проблемы в манифестом, запусти утилитку Dbgview, посмотри что туда падает. Либо я всегда врубаю OllyDBG, гружу там прогу и смотрю потом Log (Alt-L), там видно на какой библиотеке завалилось и в чём ошибка. |
| Автор: Artemon 27.2.2010, 16:06 |
| Вот что выяснил: Собранный на Win2003 exe файл (debug версия) не работает на XP, вообще никак, даже при наличии VS2005. Собранный на Win2003 exe файл (release версия) работает при наличии redist_x86. |
| Автор: chaos 27.2.2010, 16:42 |
| Artemon, ё моё чувак. для работы приложения собранного 2003 студией нужны библы msvc*7*.dll, для 2005 msvc*80.dll возьми эти длл с собой и все. Добавлено через 5 минут и 11 секунд http://prog.org.ru/wiki/index.php?title=%D0%A1%D0%B1%D0%BE%D1%80%D0%BA%D0%B0_Qt_%D0%B1%D0%B5%D0%B7_%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B5%D0%B9_(MS_Visual_Studio) |
| Автор: Artemon 27.2.2010, 16:58 |
| chaos, я же написал, что оба компа девелоперских, и везде есть redist_x86 и VS2005 стоит. Проблема НЕ в отсутствии библиотек, а похоже в разных версиях crt на WinXP и Win2003 |
| Автор: chaos 27.2.2010, 17:16 |
про что я тебе и говорю. см посты выше |
| Автор: Любитель 27.2.2010, 17:36 |
| А Qt собиралась на каждой машине отдельно? Сервис-паки какие на машинах? Ну и.. наконец - может просто выложите нерабочий экзешник, посмотрим, чего не хватает |
| Автор: chaos 27.2.2010, 21:43 | ||
может даже сам посмотреть через depends |
| Автор: Artemon 27.2.2010, 21:51 |
| При загрузке программы в Depends - он ругается, что мол чего-то не хватает, НО НЕ ГОВОРИТ ЧЕГО, и не показывается каких-то не найденных зависимостей. Если обычно чего-то не хватает, то он показывал желтым значком. OllyDbg, вообще отказывается запускать такой exe Добавлено через 3 минуты и 34 секунды Qt не собирал, ставил уже собранную комерческую версию 4.3 Добавлено через 5 минут и 50 секунд Файлы типа msvc*80d.dll, тоже пробовал подсовывать, не помогло. Именно файлы с буквой d в конце. Т.к. мне нужна дебажная сборка, работающая на других компах. |
| Автор: Любитель 27.2.2010, 22:14 |
| Рантайм студии 2005 и выше "подсунуть" нельзя. Про это уже ни раз писалось, там загрузка через WinSxS. Можешь выложить файл? |
| Автор: Artemon 27.2.2010, 22:58 |
| Вот тестовое приложение http://slil.ru/28717031 |
| Автор: Любитель 28.2.2010, 00:19 |
| Во-первых, у тебя там ссылки на две версии VC 8.0 CRT (что не особо хорошо): 8.0.50727.4053, 8.0.50727.762. Лично у меня первой из них нету. Быстрый поиск показывает, что это патч на VC++ 2005 SP1 CRT (KB973544). После установки дебаг-версии CRT этой версии у меня VC-шные зависимости разрезольвились нормально (не хватает ещё Qt-шных библиотек). Но.. в любом случае референсить два рантайма - как-то странно.. Вообщем, итоговый вывод: 1. Ссылка на древнюю версию CRT идёт от кутешных библиотек (как я понимаю, взятых из странных источников). 2. Студии на компах стоят разные. На одном с апдейтами, на другом - без. Ну или как-т так. |
| Автор: chaos 28.2.2010, 01:46 |
| Любитель, как доктор Хаус прям |
| Автор: borisbn 28.2.2010, 09:00 |
можно. буквально вчера была такая же проблема (debug-версия программы на win2003 server). Скопировал каталог WinSxS с developer-ской машины на target-овскую, без замены существующих файлов, и всё заработало. |
| Автор: Artemon 28.2.2010, 09:04 | ||||||
Что значит странные источники ? У меня лицензия от QT, по ссылке что они дали и взял.
Ты под установкой имеешь ввиду, что ты скопировал дебажные dll в папку с exe ?
Да, я тоже в конце exe файла увидел два рантайма, но как отключить один из них ? |
| Автор: Artemon 28.2.2010, 09:20 | ||
| Посмотрел на обоих машинах, что за студии стоят, на XP - Professional Edition SP1, FremeWork 2.0 SP1 на 2003 - Team Edition SP1, FremeWork 2.0 SP2 Добавлено через 1 минуту и 10 секунд
Жестокий вариант, хотелосьбы подсунуть эти либы в каталог с exe |
| Автор: borisbn 28.2.2010, 11:19 |
Ну, и твоя задача (запустить debug-версию на другой машине) тоже жестковатая Для release версии как раз и придуман vcredist_x86, а в твоём случае, если я правильно понял, нужно распространять 2 редиста: от твоей студии и от студии, в которой была собрана Qt. Чтобы этого не делать достаточно откомпилировать Qt на своей машине и распространять только свой редист |
| Автор: Любитель 28.2.2010, 20:52 | ||||
Весь каталог?! Мне вас жалко А так - ну, блин, магии нету.. Я имел ввиду под "нельзя подсунуть", что нельзя только кинуть длл-ку и всё. Понятно, что действия любого vc**_redist можно выполнить вручную.. Ну.. во-первых, всё таки замечу ещё раз, что это странное решение. Но, если очень хочется, то можно вместо централизованного хранилища использовать фичу прайват-сборок. Для этого понадобится: 1. Сама длл-ка (msvcr80d.dll) 2. Манифест Microsoft.VC80.DebugCRT.manifest Оба их можно взять в папке со студией: VC\redist\Debug_NonRedist\x86\Microsoft.VC80.DebugCRT. Если на компьютере будет установлена сборка удовлетворяющая по версии (т. е. такая же, что в заэмбеженном манифесте экзешника или совместимая), то будет использоваться она. Если нет - та, которую ты "подсунешь". Правда, я навскидку не скажу, что будет с твоими двумя ссылками.. Возможно придётся править этот манифест, чтобы реальные длл-ки считались совместимыми с обеими версиями (конечно, при этом они и реально должны быть совместимы..). Ну и, наконец, AFAIK легально дебаг длл-ки распространяются только со студией (ну или с апдейтами для неё). Все другие способы - незаконны.
Пиши, плиз правильно - FrEmeWork глаза режет Профешенал или тим-систем - это в данном случае не влияет. А вот версии сервис-паков (точнее - вообще всех апдейтов для студии) - оч даже влияют.. Добавлено через 5 минут и 44 секунды Ах, да - забыл (в очередной раз) сказать, что делать с этой длл-кой и манифестом. Так вот. Способов два. По приоритету (с точки зрения sxs-лоадера, а не моей, конечно): 1. Положить рядом с экзешником папку Microsoft.VC80.DebugCRT (с манифестом и длл-кой). 2. Положить манифест и длл-ку непосредственно в папку с экзешником. Если нужна совместимость с win 2000 или даже ниже (хотя это уже совсем мистически выглядит), то там всё просто - о SxS-загрузке речь не идёт, используется PE EAT без вариантов. Потому там версии неважны, а длл-ки должны быть либо в папке с экзешником (приоритетней), либо в %PATH%-папках (по порядку). |