Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, 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 каких-нибудь не хватает

Автор: quarz 26.2.2010, 16:36
Цитата(Artemon @  26.2.2010,  09:54 Найти цитируемый пост)
Переношу программу на машину с XP - вылетает ошибка "приложение корректно настроено, повторная установка поможет исправть проблему".


Это очень известная проблема, как правильно сказали chaos и zayacnk - не хватает библиотек, а именно vcredist

Автор: 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
Цитата(Artemon @  27.2.2010,  13:58 Найти цитируемый пост)
а похоже в разных версиях

про что я тебе и говорю. см посты выше

Автор: Любитель 27.2.2010, 17:36
А Qt собиралась на каждой машине отдельно? Сервис-паки какие на машинах?
Ну и.. наконец - может просто выложите нерабочий экзешник, посмотрим, чего не хватает smile

Автор: chaos 27.2.2010, 21:43
Цитата(Любитель @  27.2.2010,  14:36 Найти цитируемый пост)
 может просто выложите нерабочий экзешник, посмотрим, чего не хватает

может даже сам посмотреть через 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
Любитель, как доктор Хаус прям smile smile 

Автор: borisbn 28.2.2010, 09:00
Цитата(Любитель @  27.2.2010,  22:14 Найти цитируемый пост)
Рантайм студии 2005 и выше "подсунуть" нельзя

можно. буквально вчера была такая же проблема (debug-версия программы на win2003 server). Скопировал каталог WinSxS с developer-ской машины на target-овскую, без замены существующих файлов, и всё заработало.

Автор: Artemon 28.2.2010, 09:04
Цитата

1. Ссылка на древнюю версию CRT идёт от кутешных библиотек (как я понимаю, взятых из странных источников).


Что значит странные источники ? У меня лицензия от QT, по ссылке что они дали и взял.

Цитата

После установки дебаг-версии CRT этой версии


Ты под установкой имеешь ввиду, что ты скопировал дебажные 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 секунд
Цитата

Скопировал каталог WinSxS с developer-ской машины на target-овскую, без замены существующих файлов, и всё заработало.


Жестокий вариант, хотелосьбы подсунуть эти либы в каталог с exe

Автор: borisbn 28.2.2010, 11:19
Цитата(Artemon @  28.2.2010,  09:20 Найти цитируемый пост)
Жестокий вариант

Ну, и твоя задача (запустить debug-версию на другой машине) тоже жестковатая smile
Для release версии как раз и придуман vcredist_x86, а в твоём случае, если я правильно понял, нужно распространять 2 редиста: от твоей студии и от студии, в которой была собрана Qt. Чтобы этого не делать достаточно откомпилировать Qt на своей машине и распространять только свой редист

Автор: Любитель 28.2.2010, 20:52
Цитата(borisbn @  28.2.2010,  09:00 Найти цитируемый пост)
можно. буквально вчера была такая же проблема (debug-версия программы на win2003 server). Скопировал каталог WinSxS с developer-ской машины на target-овскую, без замены существующих файлов, и всё заработало.

Весь каталог?! Мне вас жалко smile
А так - ну, блин, магии нету.. Я имел ввиду под "нельзя подсунуть", что нельзя только кинуть длл-ку и всё. Понятно, что действия любого vc**_redist можно выполнить вручную..

Цитата(Artemon @  28.2.2010,  09:20 Найти цитируемый пост)
Жестокий вариант, хотелось бы подсунуть эти либы в каталог с exe 

Ну.. во-первых, всё таки замечу ещё раз, что это странное решение. Но, если очень хочется, то можно вместо централизованного хранилища использовать фичу прайват-сборок. Для этого понадобится:
1. Сама длл-ка (msvcr80d.dll)
2. Манифест Microsoft.VC80.DebugCRT.manifest

Оба их можно взять в папке со студией: VC\redist\Debug_NonRedist\x86\Microsoft.VC80.DebugCRT. Если на компьютере будет установлена сборка удовлетворяющая по версии (т. е. такая же, что в заэмбеженном манифесте экзешника или совместимая), то будет использоваться она. Если нет - та, которую ты "подсунешь". Правда, я навскидку не скажу, что будет с твоими двумя ссылками.. Возможно придётся править этот манифест, чтобы реальные длл-ки считались совместимыми с обеими версиями (конечно, при этом они и реально должны быть совместимы..).

Ну и, наконец, AFAIK легально дебаг длл-ки распространяются только со студией (ну или с апдейтами для неё). Все другие способы - незаконны.

Цитата(Artemon @  28.2.2010,  09:20 Найти цитируемый пост)
Посмотрел на обоих машинах, что за студии стоят,

на XP - Professional Edition SP1, FremeWork 2.0 SP1
на 2003 - Team Edition SP1, FremeWork 2.0 SP2

Пиши, плиз правильно - FrEmeWork глаза режет smile

Профешенал или тим-систем - это в данном случае не влияет. А вот версии сервис-паков (точнее - вообще всех апдейтов для студии) - оч даже влияют..

Добавлено через 5 минут и 44 секунды
Ах, да - забыл (в очередной раз) сказать, что делать с этой длл-кой и манифестом.
Так вот. Способов два. По приоритету (с точки зрения sxs-лоадера, а не моей, конечно):
1. Положить рядом с экзешником папку Microsoft.VC80.DebugCRT (с манифестом и длл-кой).
2. Положить манифест и длл-ку непосредственно в папку с экзешником.

Если нужна совместимость с win 2000 или даже ниже (хотя это уже совсем мистически выглядит), то там всё просто - о SxS-загрузке речь не идёт, используется PE EAT без вариантов. Потому там версии неважны, а длл-ки должны быть либо в папке с экзешником (приоритетней), либо в %PATH%-папках (по порядку).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)