Russian Qt Forum

Qt => Общие вопросы => Тема начата: juvf от Апрель 18, 2015, 15:54



Название: Как в релиз добавить информацию о файле?
Отправлено: juvf от Апрель 18, 2015, 15:54
В прикреплении пример.... винда из файла ехе вытащила версию, название, копирайт и т.д.

На самом деле не столько нужно, чтоб винда видела эту инфу, сколько чтоб видел innosetup. В борланде есть в гуях галочка "включить инфо в ехе", после этого innosetup вытаскивает инфу из ехе командами
Код:
;Переменные, читаемые из инсталируемой программы
#define CompanyName      GetStringFileInfo(AppFileNameExe, "CompanyName")
#define FileDescription  GetStringFileInfo(AppFileNameExe, "FileDescription")
#define FileVersion      GetStringFileInfo(AppFileNameExe, "FileVersion")
#define LegalCopyright   GetStringFileInfo(AppFileNameExe, "LegalCopyright")
#define ProductName      GetStringFileInfo(AppFileNameExe, "ProductName")
#define OriginalFilename GetStringFileInfo(AppFileNameExe, "OriginalFilename")
Как это сделать в Qt? Удалось прикрутить только версию файла к моему ехе. проводник в винде видет версию файла, а innosetup не может её вытащить.... тащит пустые строки. У кого есть подобный опыт.... поделитесь... как танцевать этот танец и в какой бубен стучать?


Название: Re: Как в релиз добавить информацию о файле?
Отправлено: PimenS от Апрель 18, 2015, 16:00
В файле проекта можно использовать макросы:

Код:
VERSION = 1.0.8

QMAKE_TARGET_COMPANY = ***
QMAKE_TARGET_DESCRIPTION = ***
QMAKE_TARGET_PRODUCT = ***
QMAKE_TARGET_COPYRIGHT = ***

Есть еще и другие, но я не ковырял.


Название: Re: Как в релиз добавить информацию о файле?
Отправлено: Bepec от Апрель 18, 2015, 16:19
Можно навешивать дополнительно.
А на деле, в exe зашиты все эти данные. Не знаю как для minGw, а для MCVS добавляет файл ресурсов и в него всё пишем.


Название: Re: Как в релиз добавить информацию о файле?
Отправлено: kuzulis от Апрель 18, 2015, 16:33
А в гугле забанили?


Название: Re: Как в релиз добавить информацию о файле?
Отправлено: juvf от Апрель 18, 2015, 16:40
В файле проекта можно использовать макросы:

Код:
VERSION = 1.0.8

QMAKE_TARGET_COMPANY = ***
QMAKE_TARGET_DESCRIPTION = ***
QMAKE_TARGET_PRODUCT = ***
QMAKE_TARGET_COPYRIGHT = ***
Эти макросы не работают, если в профайле определён свой RC_FILE. Определена иконка. Если убрать из профайла RC_FILE, то qmake сделает свой .rc с данными из макросов VERSION, QMAKE_TARGET_COMPANY  и т.д. Причем это только с версии 5.0.2 стало работать, пруфлинк (http://blog.mgsxx.com/?p=2070)

Убрал из профайла свой .rc, проводник увидел версию, а инносетап нет.

Цитировать
Не знаю как для minGw, а для MCVS добавляет файл ресурсов и в него всё пишем.
qmake тоже добавляет файл ресурсов, и в него пишет.... но тут либо иконку, либо версию файла к ехе. А как и рыпку съесть, и .....? К тому же инносетап не видет эту версию в ехе. У кого есть опыт по созданию инсталяторов qt приложений?


Название: Re: Как в релиз добавить информацию о файле?
Отправлено: juvf от Апрель 18, 2015, 16:44
А в гугле забанили?
Нет. Не забанили. А зачем этот форум, если гугл всё найдет? Естественно вначале гуглил.... не нашел рабочих примеров. Дайте ссылку гугла на рабочий пример решения моей проблемы?


Название: Re: Как в релиз добавить информацию о файле?
Отправлено: Bepec от Апрель 18, 2015, 16:53
знач редактируй прям после компиляции и впихивай свои данные) редакторов ресурсов дофига )


Название: Re: Как в релиз добавить информацию о файле?
Отправлено: kuzulis от Апрель 18, 2015, 16:58
Нужно использовать только один RC_FILE (в общем случае, т.к. MinGW шный winrc компилер не поддерживает несколько RC файлов), в котором прописать и иконку (https://msdn.microsoft.com/en-us/library/windows/desktop/aa381018(v=vs.85).aspx) и VersionInfo (https://msdn.microsoft.com/en-us/library/windows/desktop/aa381058(v=vs.85).aspx). Имею ввиду - не использовать всякие там QMAKE_TARGET_XXX макросы.


Цитировать
Естественно вначале гуглил.... не нашел рабочих примеров. Дайте ссылку гугла на рабочий пример решения моей проблемы?

Да неужели (http://stackoverflow.com/questions/2784697/setting-application-info-in-a-qt-executable-file-on-windows)?


Название: Re: Как в релиз добавить информацию о файле?
Отправлено: kambala от Апрель 18, 2015, 19:29
https://github.com/kambala-decapitator/d3-window-db-manager/blob/master/Resources/d3windowdbmanager.rc пример. дефайны задаются в .pro


Название: Re: Как в релиз добавить информацию о файле?
Отправлено: juvf от Апрель 20, 2015, 12:56
Нужно использовать только один RC_FILE (в общем случае, т.к. MinGW шный winrc компилер не поддерживает несколько RC файлов), в котором прописать и иконку (https://msdn.microsoft.com/en-us/library/windows/desktop/aa381018(v=vs.85).aspx) и VersionInfo (https://msdn.microsoft.com/en-us/library/windows/desktop/aa381058(v=vs.85).aspx). Имею ввиду - не использовать всякие там QMAKE_TARGET_XXX макросы.


Цитировать
Естественно вначале гуглил.... не нашел рабочих примеров. Дайте ссылку гугла на рабочий пример решения моей проблемы?

Спасибо за отклик... однако... вы сами пробовали сделать то, что я делаю... по своим ссылкам?
1) по вашей ссылке на иконку, нужно так 'nameID ICON filename', однако в qt приложении это делается так 'IDI_ICON1               ICON    DISCARDABLE     "filename.ico" '
2) и вторую ссылку (https://msdn.microsoft.com/en-us/library/windows/desktop/aa381058%28v=vs.85%29.aspx) я видел и по ней пример копипастил в проект.... не видет инносетап версию файла.
3)
Цитировать
Да неужели (http://stackoverflow.com/questions/2784697/setting-application-info-in-a-qt-executable-file-on-windows)?
спасибо за ссылку, но во первых где вы там видите слово "inno setup"? Там нет решения моей проблемы. Во вторых.... вы кинули голое "А в гугле забанили?".  Зачем? Холивар устроить? После я вас попросил дать ссылку ГУГЛА на решение проблемы... не ссылку на решение проблемы, а именно ссылку гугла.... что вы вводите в поиск? какие ключевые слова?  может я не те слова в поиск ввожу... можно же было как-то так сразу ответить "А в гугле забанили (https://www.google.ru/search?q=%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5+%D0%BF%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D1%8B+&ie=utf-8&oe=utf-8&gws_rd=cr&ei=Gsg0VYqzAeGiyAO88IHgBg)?" или хотябы так "Учитесь искать в гугле (http://lmgtfy.com/?q=%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5+%D0%BF%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D1%8B+)"


что я имею на данный момент..... такой rc файл
Код:
IDI_ICON1               ICON    DISCARDABLE     "logo.ico"

#include <windows.h>

#define VER_FILEVERSION 1,2,3,4

VS_VERSION_INFO VERSIONINFO
FILEVERSION     VER_FILEVERSION
PRODUCTVERSION  VER_FILEVERSION
FILEFLAGSMASK 0x17L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904E4"
        BEGIN
            VALUE "CompanyName",        "VER_COMPANYNAME_STR"
            VALUE "FileVersion",        "5.2.3.4"
            VALUE "ProductVersion",     "6.2.3.4"
    VALUE "InternalName",     "D3WindowDBManager"
            VALUE "LegalCopyright",   "Copyright (C) kambala 2013"
            VALUE "OriginalFilename", "D3WindowDBManager.exe"
            VALUE "ProductName",      "D3WindowDBManager"

        END
    END

    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x0, 1251
    END
END
в атаче скрин из проводника. вот что в проекте innosetup
Код:
...
#define AppFileName      "D3WindowDBManager"
#define AppFileNameExe   AppFileName + ".exe"
#define FileVersion      GetStringFileInfo(AppFileNameExe, "FileVersion")
;Название файла инсталятора
#define OutputBaseFileName "setup_"+FileVersion
...
[Setup]
OutputBaseFileName={#OutputBaseFileName}
...
на выходе получается инсталятор с именем setup_.exe. Т.е. инносетап не смог вытащить из ехе файла версию.


Название: Re: Как в релиз добавить информацию о файле?
Отправлено: kuzulis от Апрель 20, 2015, 13:26
Цитировать
Спасибо за отклик... однако... вы сами пробовали сделать то, что я делаю... по своим ссылкам?

Конечно, у меня все работает.

Цитировать
но во первых где вы там видите слово "inno setup"?
а выходе получается инсталятор с именем setup_.exe. Т.е. инносетап не смог вытащить из ехе файла версию.

проблемы с "inno setup" нужно искать на форумах для "inno setup".



Название: Re: Как в релиз добавить информацию о файле?
Отправлено: juvf от Апрель 20, 2015, 13:30
Конечно, у меня все работает.
а что работает? у вас инносетап вытаскивает инфу из ехе?

Цитировать
проблемы с "inno setup" нужно искать на форумах для "inno setup".
так инносетап вытаскивает инфу из других ехе. Я не знаю кто виноват... mingw, qt или inno setup. Решение проблемы ищю по всем форумам. Может тут кто-то уже сталкивался с подобным и решил эту проблему.


Название: Re: Как в релиз добавить информацию о файле?
Отправлено: kuzulis от Апрель 20, 2015, 14:18
Цитировать
а что работает?

Работает добавление в ресурсы.

Цитировать
у вас инносетап вытаскивает инфу из ехе?

Я ни разу не использовал это...

Как вариант - открыть какой-нить "нормальный" EXE файл и "ненормальный" EXE файл с помощью любого редактора ресурсов (например ResEdit-win32) и сравнить секции..
Или как вариант - взять какой-то любой EXE скомпиленный MinGW (который имеет инфу в ресурсах) и попытаться через inno-setup "использовать" и посмотреть: будет он получать ресурсы или нет. Ну, и, конечно, почитать доки от inno-setup.

PS: Но это уже не относится к Qt (и не относилось ранее).


Название: Re: Как в релиз добавить информацию о файле?
Отправлено: __Heaven__ от Апрель 20, 2015, 17:43
А вы пробовали другие exe засунуть в установщик? Быть может ваша копия никакие exe не ест