Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: igorko от Май 06, 2006, 10:01



Название: Как перенести программу на другой компьютер?
Отправлено: igorko от Май 06, 2006, 10:01
Мужики, расскажите, пожалуйста, как перенести мою Qt программу, скомпилированную MS Visual Studio 8 Express Edition, на другой компьютер.

Спасибо!


Название: Как перенести программу на другой компьютер?
Отправлено: Hordi от Май 06, 2006, 11:14
А в чем проблема?
Несешь екзешник на ЧИСТУЮ винду, запускаешь, она пишет - нехватает *.dll, копируешь эту длл и повторяешь пока не запустится.
Из полученных dll формируешь инсталлером пакет установки, инсталлер должен версии проверять и не даст тупо перезаписать более новую библиотеку старой.


Название: Как перенести программу на другой компьютер?
Отправлено: fear от Май 06, 2006, 11:53
Цитата: "Hordi"
А в чем проблема?
Несешь екзешник на ЧИСТУЮ винду, запускаешь, она пишет - нехватает *.dll, копируешь эту длл и повторяешь пока не запустится.
Из полученных dll формируешь инсталлером пакет установки, инсталлер должен версии проверять и не даст тупо перезаписать более новую библиотеку старой.


На чистой винде при запуске QT приложения, выскакивает сообшение: "Программа не правильно сконфигурирована, возможно её переустановка может решить эту проблему ..."


Название: Как перенести программу на другой компьютер?
Отправлено: igorko от Май 06, 2006, 12:05
2hordi
Именно так я и пробовал, но в итоге получается результат как у Fear :(

Что самое удивительное после таких манипуляций изменяется размер файла программы  :shock:

Что делать?
Очень надеюсь на вашу помощь.


Название: Как перенести программу на другой компьютер?
Отправлено: xor от Май 06, 2006, 12:32
Мужики из Microsoft опять нахимичили. Из dll хелла они создали хелл сборок.
После создания так назваемого WinSxS легче от этого не стало, а добавилось только геммора. Для переноса на другой комп необходимо ставить x86_Redistribute.... что то там. Но это же бред перед установкой программы устанавливать какие-то там апдейты. Самое простое решение которое я нашел состоит в следующем создаем папку Microsoft.VC80.CRT в папке с программой. Копируем туда msvcp80.dll, msvcr80.dll и создаем там файл Microsoft.VC80.CRT.manifest. В нем прописываем:
Код:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- Copyright © 1981-2001 Microsoft Corporation -->
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <noInheritable/>
    <assemblyIdentity
        type="win32"
        name="Microsoft.VC80.CRT"
        version="8.0.50608.0"
        processorArchitecture="x86"
        publicKeyToken="1fc8b3b9a1e18e3b"
    />
    <file name="msvcr80.dll"/>
    <file name="msvcp80.dll"/>
</assembly>

После все должно по идее работать. Только не забудь скопировать кютэшные дллки в папку с программой :).

Удачи!
Код:


Название: Как перенести программу на другой компьютер?
Отправлено: igorko от Май 06, 2006, 13:32
2 Xor

Спасибо за совет.

Сделал все как описано но, к сожалению, пишет что не найден msvp80.dll
Когда переношу его в каталог программы - пишет что неправильная попытка загрузить длл и что попробуйте переустановить программу :(


Название: Как перенести программу на другой компьютер?
Отправлено: alex0303 от Май 06, 2006, 14:14
А ежели GCC под виндой пользовать?
Кто пользовал? Какие DLL тянутся?


Название: Как перенести программу на другой компьютер?
Отправлено: L.Marvell от Май 06, 2006, 14:47
Цитата: "alex0303"
А ежели GCC под виндой пользовать?
Кто пользовал? Какие DLL тянутся?

Это зависит от того что использует приложение. Для простенькой прилаги на Qt4: qtcore4.dll, qtgui4.dll, mingw10.dll.
Для первых двух можно уменьшить размер сжав их upx'ом.


Название: Как перенести программу на другой компьютер?
Отправлено: Sergey B. от Май 06, 2006, 14:47
Цитата: "alex0303"
А ежели GCC под виндой пользовать?
Кто пользовал? Какие DLL тянутся?

тогда будет всё нормально!
только Qt*.dll + mingw.dll (~200Kb)


Название: Как перенести программу на другой компьютер?
Отправлено: xor от Май 06, 2006, 16:41
2 igorko
Странно. У меня следующая структура:
\App
--\Microsoft.VC80.CRT
------Microsoft.VC80.CRT.manifest
------msvcp80.dll
------msvcr80.dll
----App.exe
----QtCore4.dll
----QtGui4.dll

И все работает.


Название: Как перенести программу на другой компьютер?
Отправлено: fear от Май 07, 2006, 15:36
Цитата: "xor"
2 igorko
Странно. У меня следующая структура:
\App
--\Microsoft.VC80.CRT
------Microsoft.VC80.CRT.manifest
------msvcp80.dll
------msvcr80.dll
----App.exe
----QtCore4.dll
----QtGui4.dll

И все работает.


При таком варианте пишет, что msvcp80.dll не является образом программы для Windows NT.


Название: Как перенести программу на другой компьютер?
Отправлено: xor от Май 11, 2006, 10:23
А ты прогу в релизе откомплил?


Название: Как перенести программу на другой компьютер?
Отправлено: Steven_Orko от Май 11, 2006, 21:48
У меня тоже не получается. Пишет аналогичные вещи и для той структуры, что дал fear.
Запихал все в один каталог, как раньше с 2003 делал, только манифест переименовал в App.exe.manifest, плюс и либы в тот же каталог... ща пишет, что либы не являются образами программы для Windows NT, да, кстати, прога в релизе


Название: Как перенести программу на другой компьютер?
Отправлено: xor от Май 12, 2006, 11:03
Такой нюанс. У каждого приложения есть свой манифест, только его можно сделать либо эмбеддед либо таскать с собой всегда. Если он не эмбеддед нужно скопировать скажем App.exe.manifest туда где лежит App.exe.
2 Steven_Orko: Тот манифест который Microsoft.VC80.CRT.manifest переименовывать не нужно.


Название: Как перенести программу на другой компьютер?
Отправлено: igorko от Май 12, 2006, 11:18
2 xor: я - в релизе откомпилил и без толку.

Все что я смог сделать - это скопировать весь (*) каталог C:\WINDOWS\WinSxS
с моего компьютера на целевой.
И тогда - заработало.
(*) - Копировал ВЕСЬ, потому-что нету времени разбираться. И потому не уверен не повлияет ли это на работу этого компьютера. (Пока не заметно)


Название: Как перенести программу на другой компьютер?
Отправлено: Steven_Orko от Май 13, 2006, 00:22
А я тоже копировал. Нефига не работает даже тогда. To xor: Про манифесты я немного, совсем чуть-чуть знаю )))) переименовал от безысходности ))))) У меня MSVS2005 генерирует два манифеста:
Iralab.exe.intermediate.manifest
Iralab.exe.embed.manifest
Iralab.exe.embed.manifest.res
Переносил с программой. Получал типа такой ошибки: Программа выполнила недопустимую операццию" или "Неожиданный exception по адресу такому-то и такому-то". Так что результат один. Не было у меня с 2003.NET таких проблем. Что делать-то? Кто расскажет? Или ткните в ресурс какой, почитаю )))


Название: Как перенести программу на другой компьютер?
Отправлено: Anchorite от Май 13, 2006, 08:16
Есть файлик

<MSVSRoot>\SDK\v2.0\BootStrapper\Packages\vcredist_x86\vcredist_x86.exe.

С его помощью можно корректно установить весь рантайм.

Там же, кстати, лежит еще куча всякго необходимого для работы прог барахла.


Название: Как перенести программу на другой компьютер?
Отправлено: Sergeich от Май 13, 2006, 15:09
Просветите темного: нах вообще эти манифесты нужны? Если с ними такие траблы, может лучше на 7-ке компиляться?


Название: Как перенести программу на другой компьютер?
Отправлено: noosooth от Май 14, 2006, 23:15
Люди,  а у меня все работает, но читаю я эту тему и пугаюсь... :)

Вот что делаю я дабы не пользоваться всеми этими vcredist_x86.exe

WinXP SP2, VS2005, Qt 4.1.1, release,  shared.

Думаю для начала надо разобраться как у Вас генерится манифест приложения. Т.е. embed он или внешний.

Читать про это видимо надо тут (извините url не получается, скобки похоже не нравятся):
http://msdn2.microsoft.com/en-us/library/ms235542(VS.80).aspx


Ежели манифест внешний, то со своим бинарником вам надо таскать файл "my.exe.manifest". Если embed, то он уже вкомпилирован в бинарник причем как я понимаю plain текстом.

Собственно про все это уже писал xor и писал на мой взгляд совершенно правильно, так что я всего лишь повторяюсь.

Теперь становится интересно а какие собственно сборки понадобятся вашему бинарнику на "чистом" компьютере.

В случае внешнего манифеста вы все это без труда находите в файле my.exe.manifest, а ежели он embed, то либо где нибудь файле .../Relase/my.exe.embed.manifest, либо в самом бинарнике, банальным поиском на предмет слова "manifest", благо он там живет как текст.

Что касается плюсового runtime, то ежели виндовое приложение компилировалось с ключом -MD, а нашем в случае линковки с release shared библиотеками Qt это именно так и есть, то в этом сгенеренном манифесте вы должны увидеть как минимум след.

Код:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50608.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
</assembly>


Т.е. нашему приложению нужна сборка Microsoft.VC80.CRT, причем замечу что версии ="8.0.50608.0"

Таперича, создаем файл с именем "Microsoft.VC80.CRT.manifest"
и со след. содержимым:
Код:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <noInheritable></noInheritable>
    <assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50608.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    <file name="msvcr80.dll"/>
    <file name="msvcp80.dll"/>
    <file name="msvcm80.dll"/>
</assembly>


На "чистую" машину в один и тот же каталог копируем  
 - бинарник
 - Qt' овые dll-ки (само собой)
 - если манифест приложения внешний, то файл my.exe.manifest
 - созданный нами файл Microsoft.VC80.CRT.manifest
 - msvcr80.dll, msvcp80.dll, msvcm80.dll

Ну неужели не работает?

-------------------------------------------------------------------------
Кстати, я тут пробовал собирать Qt  VS2005 компилятором  как  release static, предварительно поменяв
в ...\mkspecs\win32-msvc2005\qmake.conf
   QMAKE_CFLAGS_RELEASE   = -O2 -MD
   на
   QMAKE_CFLAGS_RELEASE   = -O2 -MT

Что характерно - собралось.
Соответствено  Release приложения я тоже ессно статически линковал с плюсовым runtime (-MT).

Проблем при таком подходе я пока вроде не наблюдал, ну не считая ограничений статической сборки Qt и ешё большего размера бинарника :)

Оно конечно страшновато, но зато runtime с собой тянуть точно не понадобится.


Название: Как перенести программу на другой компьютер?
Отправлено: Steven_Orko от Май 15, 2006, 01:35
БОЛЬШОЕ спасибо noosooth
У меня все запустилось, как только я прочитал твой пост. Thanks!!!


Название: Как перенести программу на другой компьютер?
Отправлено: noosooth от Май 15, 2006, 09:48
Цитата: "Steven_Orko"
У меня все запустилось, как только я прочитал твой пост. Thanks!!!


Это приятно, спасибо.

Будем надеяться у других тоже срастется.
А то вон люди уже каталоги WinSxS копируют и собираются на VS2003 перебираться. :)


Название: Как перенести программу на другой компьютер?
Отправлено: igorko от Май 15, 2006, 14:10
Еще раз БОЛЬШОЕ СПАСИБО, Noosooth, и от меня!

Совершенно исчерпывающий профессиональный ответ.
Все заработало с первого раза :)


Название: Как перенести программу на другой компьютер?
Отправлено: fear от Май 23, 2006, 12:30
Что-то я один выходит подтупливаю,

создал каталог с содержимым:
Hello.exe
Hello.exe.intermediate.manifest
Microsoft.VC80.CRT.manifest
msvcm80.dll
msvcp80.dll
msvcr80.dll
QtCore4.dll
QtGui4.dll

на чистой винде, пипец, " ... библиотека msvcp80.dll не является образом программы для NT ..."
Ткните носом, пожалуйста, туда где ошибку мог допустить.


Название: Как перенести программу на другой компьютер?
Отправлено: Steven_Orko от Май 23, 2006, 18:44
Тебе манифест не нужен, он уже в прогу встроен ))) Удали его, запустится )))


Название: Как перенести программу на другой компьютер?
Отправлено: fear от Май 23, 2006, 23:14
Цитата: "Steven_Orko"
Тебе манифест не нужен, он уже в прогу встроен ))) Удали его, запустится )))


К моему сожалению, не запускается ...


Название: Как перенести программу на другой компьютер?
Отправлено: Steven_Orko от Май 23, 2006, 23:54
эээ, я имел ввиду вот этот манифест: Hello.exe.intermediate.manifest. Именно он не нужен )))


Название: Как перенести программу на другой компьютер?
Отправлено: Angler225 от Декабрь 19, 2006, 11:48
to noosooth
А можно по подробнее про статическую линковку, плиз, а то ни как не могу заюзать.
Цитировать
Кстати, я тут пробовал собирать Qt VS2005 компилятором как release static, предварительно поменяв
в ...\mkspecs\win32-msvc2005\qmake.conf
QMAKE_CFLAGS_RELEASE = -O2 -MD
на
QMAKE_CFLAGS_RELEASE = -O2 -MT

Что характерно - собралось.
Соответствено Release приложения я тоже ессно статически линковал с плюсовым runtime (-MT).

Проблем при таком подходе я пока вроде не наблюдал, ну не считая ограничений статической сборки Qt и ешё большего размера бинарника Smile

Оно конечно страшновато, но зато runtime с собой тянуть точно не понадобится.


Название: Как перенести программу на другой компьютер?
Отправлено: Sergey B. от Январь 20, 2007, 15:50
Цитата: "noosooth"
Цитата: "Steven_Orko"
У меня все запустилось, как только я прочитал твой пост. Thanks!!!


Это приятно, спасибо.

Будем надеяться у других тоже срастется.
А то вон люди уже каталоги WinSxS копируют и собираются на VS2003 перебираться. :)


Кстати, что то у меня за фигня... :(
Уж не знаю что и делать...
Прога запускается но пишет что Driver not loaded...
Т.е. к базе я не коннекчусь... :(
Скопировал QSQL плагины в sqldrivers подпапку.
Вроде как по старому рецепту, перекинул туда все *.dll из PostgreSQL, прога запускается, т.е. dll все находит, только свои плагины не видит :(...
Пробовал и app.addLibraryPath, результат 0.0
стянул Qt под мингвин, собрал драйвер, на нём тоже самое проги не видят плагинов...
Даж взял sqlbrowser из демок...
А он вообще драйверы никакие не видит, даже qodbc и qsqlite...
Пишет нет ни одного драйвера... :(

Qt 4.2.0 с андеграунда и Qt 4.2.2 с MingW.exe от троллей

Кстати эта проблема решается удалением ключа реестра
Код:

[HKEY_CURRENT_USER\Software\Trolltech]


Название: Как перенести программу на другой компьютер?
Отправлено: Sergey B. от Апрель 04, 2007, 13:35
Эта программа скомпилена VC8, вот список файлов.

Код:

12.10.2005  08:32            24я576 comerr32.dll
26.02.2007  20:02           376я832 Controlling.exe
05.03.2007  11:07    <DIR>          help
12.10.2005  08:32           524я288 krb5_32.dll
06.07.2005  10:06         1я060я864 libeay32.dll
31.01.2003  17:41           916я849 libiconv-2.dll
01.02.2003  14:51            51я016 libintl-2.dll
13.02.2006  11:43           175я085 libpq.dll
05.03.2007  11:13    <DIR>          Microsoft.VC80.CRT
22.03.2005  12:37           184я320 pgoledb.dll
31.01.2006  13:27           335я872 psqlodbca.dll
31.01.2006  13:26           344я064 psqlodbcw.dll
04.06.2005  01:52            60я273 pthreadGC2.dll
27.11.2006  22:44         2я359я296 Qt3Support4.dll
27.11.2006  22:52            23я040 QtAssistantClient4.dll
08.02.2007  13:47         1я466я368 QtCore4.dll
27.11.2006  22:55         1я331я200 QtDesigner4.dll
27.11.2006  22:29         5я521я408 QtGui4.dll
27.11.2006  22:40           294я912 QtNetwork4.dll
27.11.2006  22:41           159я744 QtOpenGL4.dll
27.11.2006  22:39           184я320 QtSql4.dll
27.11.2006  22:40           217я088 QtSvg4.dll
27.11.2006  22:08           217я088 QtXml4.dll
05.03.2007  11:14             8я265 sheme.sql
27.11.2006  23:07           110я592 sqlbrowser.exe
03.04.2007  12:17    <DIR>          sqldrivers

22.09.2005  22:22               522 Microsoft.VC80.CRT.manifest
23.09.2005  05:56           479я232 msvcm80.dll
22.09.2005  22:05           548я864 msvcp80.dll
22.09.2005  22:05           626я688 msvcr80.dll

27.11.2006  22:51           282я624 qsqlite.dll
28.11.2006  00:20            61я440 qsqlmysql.dll
27.11.2006  22:50            77я824 qsqlodbc.dll
27.11.2006  23:20           110я592 qsqlpsql.dll



Самый прикол, что на некоторых компах она не запускается, и даже штатный sqlbrowser из демок не кажет ни одного драйвера, причём удаление ключа не помогает, а на некоторых пашет на 5+ :(

И ещё ниже привожу спиок файлов, её же, но скомпиленную  mingw - тоже удаление ключа и последующий запуск, решает проблему, даже на тех компах, на которых скомпиленная VC8 не запускается...
Что блин за полтергейст :(
"не запускается" - я имею ввиду пишет Driver not loaded

 
Код:

12.10.2005  08:32            24я576 comerr32.dll
03.04.2007  12:34           484я352 Controlling.exe
04.04.2007  14:34             1я569 files
04.04.2007  14:34                 0 files.txt
03.04.2007  12:53    <DIR>          help
12.10.2005  08:32           524я288 krb5_32.dll
06.07.2005  10:06         1я060я864 libeay32.dll
31.01.2003  17:41           916я849 libiconv-2.dll
01.02.2003  14:51            51я016 libintl-2.dll
13.02.2006  11:43           175я085 libpq.dll
30.01.2005  02:35            15я960 mingwm10.dll
22.03.2005  12:37           184я320 pgoledb.dll
31.01.2006  13:27           335я872 psqlodbca.dll
31.01.2006  13:26           344я064 psqlodbcw.dll
04.06.2005  01:52            60я273 pthreadGC2.dll
21.02.2007  15:11         3я456я000 Qt3Support4.dll
03.04.2007  12:23         1я915я904 QtCore4.dll
21.02.2007  15:19         1я826я304 QtDesigner4.dll
21.02.2007  15:22         1я786я880 QtDesignerComponents4.dll
21.02.2007  15:05         7я869я440 QtGui4.dll
21.02.2007  15:05           289я280 QtSql4.dll
21.02.2007  15:06           353я792 QtSvg4.dll
21.02.2007  14:55           318я976 QtXml4.dll
21.02.2007  15:30           101я376 sqlbrowser.exe
03.04.2007  12:39    <DIR>          sqldrivers
06.07.2005  10:06           200я704 ssleay32.dll

21.02.2007  15:13           351я744 qsqlite.dll
21.02.2007  15:13           105я984 qsqlodbc.dll
03.04.2007  12:29            80я384 qsqlpsql.dll


Название: Re: Как перенести программу на другой компьютер?
Отправлено: BigHom от Июнь 01, 2011, 10:13
не могу запустить exe на другой машине с XP :
переписываю всё , включая манифест :
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level='asInvoker' uiAccess='false' />
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
  </dependency>
</assembly>

Всё равно не работает - выдаётся сообщение:
Приложение не запущено , поскольку оно не корректно настроено. Повторная настройка приложения может решить данную проблему.


Название: Re: Как перенести программу на другой компьютер?
Отправлено: Авварон от Июнь 01, 2011, 12:35
vcredist стоит?


Название: Re: Как перенести программу на другой компьютер?
Отправлено: BigHom от Июнь 01, 2011, 12:56
как узнать стоит или нет? и на каком компе должен стоять - где собирается программа или где используется?


Название: Re: Как перенести программу на другой компьютер?
Отправлено: Авварон от Июнь 01, 2011, 13:18
где используется, на то он и редист.


Название: Re: Как перенести программу на другой компьютер?
Отправлено: BigHom от Июнь 01, 2011, 14:14
запустил где собирается - exe уменьшился в размерах - после этого где используется почему-то заработало(там тоже зустановил ). Интересно было бы знать почему . Спасибо за помощь.


Название: Re: Как перенести программу на другой компьютер?
Отправлено: BigHom от Июнь 17, 2011, 10:52
На виртуальную машину с Windows98 не устанавливается - выдаёт сообщение чтобы сменили версию windows - как быть? Есть ли другие способы похожие как в Qt3 с переписыванием dll или включением в exe файл всего что нужно - то есть без запуска vcredist ?


Название: Re: Как перенести программу на другой компьютер?
Отправлено: Пантер от Июнь 17, 2011, 10:54
Qt начиная с версии 4.6 (или 4.5) не поддерживает 98 винду. Тут ничего не поделаешь. Используй более старые версии Qt.


Название: Re: Как перенести программу на другой компьютер?
Отправлено: LisandreL от Июнь 17, 2011, 11:11
Qt начиная с версии 4.6 (или 4.5) не поддерживает 98 винду.
Если быть точным, то последняя официально и без костылей поддерживающая - 4.4.3.


Название: Re: Как перенести программу на другой компьютер?
Отправлено: BigHom от Июнь 17, 2011, 11:45
Если быть точным, то последняя официально и без костылей поддерживающая - 4.4.3.
Как раз 4.4.3 выдаёт сообщение о том - чтобы версию windows поменять...


Название: Re: Как перенести программу на другой компьютер?
Отправлено: LisandreL от Июнь 17, 2011, 13:43
4.4.3 с MinGW точно работало.
http://get.qt.nokia.com/qt/source/qt-win-opensource-4.4.3-mingw.exe