понедельник, 17 марта 2014 г.

Частные сборки (как указать dll для приложения в манифесте)

Разрабатывая приложения на Qt, во время развертывания продукта, приходится копировать все dll файлы, от которых он (продукт) зависит, в каталог с исполняемым файлом. Хорошо было бы создать папку и поместить туда все эти библиотеки. Используя механизм, так называемых частных сборок, можно добиться желаемого результата.

Вот какая структура папки с продуктом в начале:
downloads /
    downloads.exe
    downloads.ini
    libgcc_s_dw2-1.dll
    libstdc++-6.dll
    mingwm10.dll
    QtCore4.dll
    QtGui4.dll
    QtNetwork4.dll
Необходимо изменить её следующим образом:
downloads /
    downloads.exe
    downloads.ini
    share /
        libgcc_s_dw2-1.dll
        libstdc++-6.dll
        mingwm10.dll
        QtCore4.dll
        QtGui4.dll
        QtNetwork4.dll
При таких изменениях приложение не запустится. Чтобы исправить ситуацию нужно создать два файла манифеста, а именно:
downloads /
    downloads.exe
    downloads.ini
    downloads.exe.manifest
    share /
        libgcc_s_dw2-1.dll
        libstdc++-6.dll
        mingwm10.dll
        QtCore4.dll
        QtGui4.dll
        QtNetwork4.dll
        share.manifest
Содержимое файла downloads.exe.manifest:
<?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='share' version='1.0.0.0' processorArchitecture='x86' />
    </dependentAssembly>
  </dependency>
</assembly>
Содержимое файла share.manifest:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <noInheritable/>
  <assemblyIdentity type="win32" name="share" version="1.0.0.0" processorArchitecture="x86" />
  <file name="libgcc_s_dw2-1.dll" />
  <file name="libstdc++-6.dll" />
  <file name="mingwm10.dll" />
  <file name="QtCore4.dll" />
  <file name="QtGui4.dll" />
  <file name="QtNetwork4.dll" />
</assembly>

Важно! После добавления файлов манифеста следует изменить дату модификации исполняемого файла на текущую. Также, само собой разумеется, что с того момента, когда были добавлены манифесты, вступает в силу контроль версий, которые указаны в манифестах. То есть нужно чтобы версии совпадали.

Удачи!

Комментариев нет:

Отправить комментарий