Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [Qt5.3] - Проблема первого запуска на чужой машине


Автор: Dreamer_0x01 29.10.2015, 11:07
Здравствуйте.

Сделал программу, отладил. Скопировал в папку с программой все нужные dll, сделал инсталятор (с помощью NSIS), через инсталятор устанавливаю программу заказчику. 

Получается такая картина. Заказчик через инсталятор ставит себе программу. Все копируется как надо, структура папок создается, dll копируются.

Далее заказчик запускает exe-файл - получает ругательство о том, что не найден Qt5Core.dll. Я уже было подумал, что забыл его включить в инсталятор - но он там есть, на комп к заказчику тоже поставился... А дальше - интереснее. В окошке, в котором сообщается, что нет Qt5Core.dll - есть кнопочки закрытия и кнопочка ОК. Так вот, если нажать кнопку ОК - окно закрывается, но спустя секунд 5-10 - ....вдруг открывается окно с моей программой, которая работает как ни в чем не бывало. 

А если программу закрыть и запупустить снова, то запуск происходит нормально и сразу, никаких ругательств ни на какие dll нет. То есть проблема есть только при первом запуске при установке приложения в новую папку. 
Если установить в другую - происходит все то же самое - первый запуск - ругателство на dll - нормальный запуск программы спустя 5-10 секунд - отсутствие ошибки при повторных запусках.

Может, кто-то подскажет, чем вызван такой эффект?

В программе используются: библиотеки для работы с xml, sql, gui.
Вот про-файл:
Код

#-------------------------------------------------
#
# Project created by QtCreator 2015-09-06T13:21:16
#
#-------------------------------------------------
QMAKE_CXXFLAGS += -std=c++11

QT       += core gui
QT += sql
QT += xml


greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = BageDesigner
TEMPLATE = app

SOURCES += main.cpp\
        mainwindow.cpp \
    ../common/db.cpp \
    ../common/MaketData.cpp \
    ../common/mvscene.cpp

HEADERS  += mainwindow.h \
    ../common/db.h \
    ../common/MaketData.h \
    ../common/mvscene.h

FORMS    += mainwindow.ui

RESOURCES += \
    resource.qrc

RC_FILE = exeicon.rc




Вот список dll, которые устанавливаются вместе с программой (кусок скрипта из NSIS):

Код

Section "DllFles" SEC02
  SetOutPath "$INSTDIR\accessible"
  File "..\..\Release\release\accessible\qtaccessiblequick.dll"
  File "..\..\Release\release\accessible\qtaccessiblewidgets.dll"
  SetOutPath "$INSTDIR\iconengines"
  File "..\..\Release\release\iconengines\qsvgicon.dll"
  SetOutPath "$INSTDIR\imageformats"
  File "..\..\Release\release\imageformats\qdds.dll"
  File "..\..\Release\release\imageformats\qgif.dll"
  File "..\..\Release\release\imageformats\qicns.dll"
  File "..\..\Release\release\imageformats\qico.dll"
  File "..\..\Release\release\imageformats\qjp2.dll"
  File "..\..\Release\release\imageformats\qjpeg.dll"
  File "..\..\Release\release\imageformats\qmng.dll"
  File "..\..\Release\release\imageformats\qsvg.dll"
  File "..\..\Release\release\imageformats\qtga.dll"
  File "..\..\Release\release\imageformats\qtiff.dll"
  File "..\..\Release\release\imageformats\qwbmp.dll"
  File "..\..\Release\release\imageformats\qwebp.dll"
  SetOutPath "$INSTDIR\platforms"
  File "..\..\Release\release\platforms\qwindows.dll"
  SetOutPath "$INSTDIR\sqldrivers"
  File "..\..\Release\release\sqldrivers\qsqlite.dll"
  File "..\..\Release\release\sqldrivers\qsqlmysql.dll"
  File "..\..\Release\release\sqldrivers\qsqlodbc.dll"
  File "..\..\Release\release\sqldrivers\qsqlpsql.dll"
  SetOutPath "$INSTDIR"
  File "C:\Qt\Qt5.3.0\5.3\mingw482_32\bin\Qt5Xml.dll"
  File "C:\Qt\Qt5.3.0\5.3\mingw482_32\bin\Qt5Widgets.dll"
  File "C:\Qt\Qt5.3.0\5.3\mingw482_32\bin\Qt5Sql.dll"
  File "C:\Qt\Qt5.3.0\5.3\mingw482_32\bin\Qt5Gui.dll"
  File "C:\Qt\Qt5.3.0\5.3\mingw482_32\bin\Qt5Core.dll"
  File "C:\Qt\Qt5.3.0\5.3\mingw482_32\bin\libwinpthread-1.dll"
  File "C:\Qt\Qt5.3.0\5.3\mingw482_32\bin\libstdc++-6.dll"
  File "C:\Qt\Qt5.3.0\5.3\mingw482_32\bin\libgcc_s_dw2-1.dll"
  File "C:\Qt\Qt5.3.0\5.3\mingw482_32\bin\icuuc52.dll"
  File "C:\Qt\Qt5.3.0\5.3\mingw482_32\bin\icuin52.dll"
  File "C:\Qt\Qt5.3.0\5.3\mingw482_32\bin\icudt52.dll"


; Shortcuts
  !insertmacro MUI_STARTMENU_WRITE_BEGIN Application
  !insertmacro MUI_STARTMENU_WRITE_END
SectionEnd



Автор: math64 29.10.2015, 11:15
Укажите какая ОС и антивирус используется, скорее всего при первом запуске dll блокируется антивирусом.

Автор: borisbn 29.10.2015, 11:32
Может это 
https://code.google.com/p/simulationcraft/issues/detail?id=2271
или это 
https://code.google.com/p/simulationcraft/issues/detail?id=1846
поможет

Автор: Dreamer_0x01 4.11.2015, 13:03
math64, извиняюсь за долгое молчание, было никак не получить эту информацию от того заказчика.
У него Windows 7 профессионал 64х, аваст.


borisbn, почитал, хотя и не очень совершенен в английском. Как я понял, они решили эту проблему установкой программы не в стандартные папки windows, а в другое место (в их примере - на раздел D:\). Это не выглядит решением проблемы - скажем так, не очень хорошо пользователю захламливать корневые разделы дисков дополнительными папками при установке своих программ. Разве что только как крайняя мера.


Автор: math64 5.11.2015, 09:02
Цитата(Dreamer_0x01 @  4.11.2015,  13:03 Найти цитируемый пост)
math64, извиняюсь за долгое молчание, было никак не получить эту информацию от того заказчика.
У него Windows 7 профессионал 64х, аваст.

К сожалению, сам не могу ничего посоветовать - у меня старая машина с Windows XP.
Но эта информация нужна другим, кто захочет ответить.
Если у Вас есть чистая машина, попробуте поставить на неё эту ОС и антивирус и попробовать разобраться, что происходит.

Добавлено через 7 минут и 1 секунду
Кстати, у Заказачика могут быть программы, написанные на Qt другой версии - в некоторых случаях они тоже могут мешаться.

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