Страница 2 из 5

Re: Как создать полноценное приложение *.exe

Добавлено: 20 апр 2011, 09:05
Lexan_83
dimedrol писал(а):С инсталером все понятно: у меня версия 8,2, там рантайм по умолчанию галочка стоит на рантайме. не подскажите ли как ответ на самый первый вопрос:
"Подскажите, пожалуйста, как создать полноценное приложение *.exe, чтобы его можно было использовать на любой машине, даже на которой нет установленного labVIEW."
цель: создать ехе, который без установки запустится на любой машине, которая ранее о :labview: и его модулях ничего не знала. Просто скопировал, запустил - работает.

Когда-то с седьмой версией провел такой эксперимент: скопировал свой екзешник в папку C:\Program Files\National Instruments\Shared\LabVIEW Run-Time\7.0, а затем всю папку Run-Time\7.0 на другой компьютер без :labview:, и екзешник запустился. На восьмой версии не проверял, но по идее должно работать.

Re: Как создать полноценное приложение *.exe

Добавлено: 21 апр 2011, 20:44
dimedrol
сегодня попробовал только с папкой resours на версии 8.2, тоже ничего не получилось(((
надо будет завтра на run-time попробовать

пробовал и с run-time, ругался на отсутствие niini32.dll, нашел таковую... потом просто заупускается и вылетает, не показывая даже окна. Судя по советам, надо искать именно 7 версию :labview: ...

Re: Как создать полноценное приложение *.exe

Добавлено: 04 мар 2013, 20:59
green520
Ну, ладно, статичное приложение создать не возможно.
Но что, даже нельзя в месте с приложением тащить RTE?
т. е. нет возможности создать мобильное приложение без инсталлера?
решение все еще не найдено?

Re: Как создать полноценное приложение *.exe

Добавлено: 04 мар 2013, 21:59
AndreyDmitriev
green520 писал(а):Ну, ладно, статичное приложение создать не возможно.
Но что, даже нельзя в месте с приложением тащить RTE?
т. е. нет возможности создать мобильное приложение без инсталлера?
решение все еще не найдено?


Официального решения нет (и уже, видимо, не будет). Единственный документированный способ для старших версий - ставить LabVIEW Run-Time. Там дело даже не в LabVIEW, а в MSVC. Там требуется рантайм от микрософт, а его нельзя просто скопировать в ту же папку, он должен быть установлен. Хотя теоретически можно в манифесте поковыряться - на досуге попробую.

Re: Как создать полноценное приложение *.exe

Добавлено: 05 мар 2013, 02:08
AndreyDmitriev
AndreyDmitriev писал(а):Там дело даже не в LabVIEW, а в MSVC.


А ларчик довольно просто открывался. Надо добавить в ту же папку файлы msvcr90.dll и msvcp90.dll (требуется версия 9.0.21022.8 - можно взять из папки C:\Windows\winsxs) и приложить манифест microsoft.VC90.CRT.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="Microsoft.VC90.CRT"
version="9.0.21022.8"
processorArchitecture="x86"
publicKeyToken="1fc8b3b9a1e18e3b"
/>
<file name="msvcr90.dll" />
<file name="msvcp90.dll" />
</assembly>

Минимальный набор файлов для приложения на LV2012f1:

25.07.2012 16:30 14.001.288 lvrt.dll
25.07.2012 16:58 121.344 niCPULib.dll
25.07.2012 16:58 2.214.912 NIQtCore_2012.dll
25.07.2012 16:58 8.044.544 NIQtGui_2012.dll
25.07.2012 16:58 37.376 QtManager452_2012.dll
25.07.2012 16:58 72.323 tdtable.tdr

Для LV2010f4:

29.08.2011 15:59 14.037.088 lvrt.dll
05.04.2012 13:04 183.296 nicont.dll
29.08.2011 16:19 116.736 niCPULib.dll
29.08.2011 16:19 1.968.640 NIQtCore_2010.dll
29.08.2011 16:19 7.219.712 NIQtGui_2010.dll
29.08.2011 16:19 36.352 QtManager452_2010.dll

Плюс в папке English должны лежать lvapp.rsc и vidialogs.rsc

Если используются контролы из палитры Modern, то также требуется mesa.dll и папка models.
Понятно, что чем больше используется компонентов, тем больше файлов потребуется (ну, скажем, для математических функций lvanlys.dll, для других языков соответствующие ресурсы и т.д.). Ну и эти компоненты могут потребовать в свою очередь другие части, скажем для мат. функций может MKL потребоваться и т.д. В серьёзных проектах я бы не стал такой трюк использовать - если приложение "подхватит" вместо локальных файлов что-то из системной папки, то всё может рухнуть.

Я приложил примеры, которые проверил на практически голой WinXP SP3 (плюс я прошёлся по файлам упаковщиком - это не нарушило работоспособность) - попробуйте кому не лень на разных системах.

Re: Как создать полноценное приложение *.exe

Добавлено: 07 мар 2013, 03:15
green520
Спасибо.
Будем проверять

Re: Как создать полноценное приложение *.exe

Добавлено: 24 май 2013, 11:18
gonik
AndreyDmitriev писал(а):
А ларчик довольно просто открывался. Надо добавить в ту же папку файлы msvcr90.dll и msvcp90.dll (требуется версия 9.0.21022.8 - можно взять из папки C:\Windows\winsxs) и приложить манифест microsoft.VC90.CRT.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="Microsoft.VC90.CRT"
version="9.0.21022.8"
processorArchitecture="x86"
publicKeyToken="1fc8b3b9a1e18e3b"
/>
<file name="msvcr90.dll" />
<file name="msvcp90.dll" />
</assembly>

Минимальный набор файлов для приложения на LV2012f1:

25.07.2012 16:30 14.001.288 lvrt.dll
25.07.2012 16:58 121.344 niCPULib.dll
25.07.2012 16:58 2.214.912 NIQtCore_2012.dll
25.07.2012 16:58 8.044.544 NIQtGui_2012.dll
25.07.2012 16:58 37.376 QtManager452_2012.dll
25.07.2012 16:58 72.323 tdtable.tdr

Для LV2010f4:

29.08.2011 15:59 14.037.088 lvrt.dll
05.04.2012 13:04 183.296 nicont.dll
29.08.2011 16:19 116.736 niCPULib.dll
29.08.2011 16:19 1.968.640 NIQtCore_2010.dll
29.08.2011 16:19 7.219.712 NIQtGui_2010.dll
29.08.2011 16:19 36.352 QtManager452_2010.dll

Плюс в папке English должны лежать lvapp.rsc и vidialogs.rsc

Если используются контролы из палитры Modern, то также требуется mesa.dll и папка models.
Понятно, что чем больше используется компонентов, тем больше файлов потребуется (ну, скажем, для математических функций lvanlys.dll, для других языков соответствующие ресурсы и т.д.). Ну и эти компоненты могут потребовать в свою очередь другие части, скажем для мат. функций может MKL потребоваться и т.д. В серьёзных проектах я бы не стал такой трюк использовать - если приложение "подхватит" вместо локальных файлов что-то из системной папки, то всё может рухнуть.

Я приложил примеры, которые проверил на практически голой WinXP SP3 (плюс я прошёлся по файлам упаковщиком - это не нарушило работоспособность) - попробуйте кому не лень на разных системах.

Скажите, Андрей, а для 2011 такого набора у вас нет?

Re: Как создать полноценное приложение *.exe

Добавлено: 24 май 2013, 11:40
dadreamer
gonik, а файлы с тем же именами, что выше, не подходят? Приложение падает?

Re: Как создать полноценное приложение *.exe

Добавлено: 24 май 2013, 12:40
AndreyDmitriev
gonik писал(а):Скажите, Андрей, а для 2011 такого набора у вас нет?


Да там всё по аналогии с 2010. У вас же есть все необходимые файлы, чтобы выполнить упражнение самостоятельно - msvcp90.dll, msvcr90.dll и манифест берутся из архивов выше, а остальное из C:\Program Files (x86)\National Instruments\Shared\LabVIEW Run-Time\2011.
Получится примерно вот что:
MiniApp2011.png
MiniApp2011.png (9.26 КБ) 11630 просмотров

Очевидно, что MSVC рантайм будет подходить и ко всем следующим версиям до тех пор, пока NI не перейдёт на следующую версию компилятора, а файлы NI LabVIEW Run-Time должны соответствовать версии LabVIEW, в котором генерялось приложение. Здесь нет обратной совместимости - для LV2011 рантайм от 2012 не подходит.

Re: Как создать полноценное приложение *.exe

Добавлено: 24 май 2013, 12:42
gonik
dadreamer писал(а):gonik, а файлы с тем же именами, что выше, не подходят? Приложение падает?

С пакетом 2012 пишет, что установщик слишком нов, а с пакетом 2010, что слишком стар.
Я нашел данные для аналогичного пакета 2011. Пишет ошибку.
http://yadi.sk/d/Sw1oo28u57gcP

Re: Как создать полноценное приложение *.exe

Добавлено: 24 май 2013, 13:01
AndreyDmitriev
gonik писал(а):
dadreamer писал(а):gonik, а файлы с тем же именами, что выше, не подходят? Приложение падает?

С пакетом 2012 пишет, что установщик слишком нов, а с пакетом 2010, что слишком стар.
Я нашел данные для аналогичного пакета 2011. Пишет ошибку.
http://yadi.sk/d/Sw1oo28u57gcP

Судя по этой ошибке, ваше приложение вообще рантайм не видит. Это с набором выше такая штука выскакивает, или вы сами собрали? Либо в приложении используется что-то, что требует дополнительных файлов из рантайма. Вообще для сложных приложений лучше использовать документированные способы установки. Даже если приложение внешне заводится без проблем, там надо тщательно проверять функциональность на чистой машине, чтобы быть уверенным, что всё работает как надо.

Re: Как создать полноценное приложение *.exe

Добавлено: 24 май 2013, 13:05
gonik
И еще есть кое-что...
Сам не понимаю, как это возможно, но 3 недели назад без всяких танцев с бубнами откомпилировал приложение, которое не требует никаких рантаймов лабвью.
А сейчас даже при компиляции приложения, состоящего только из одной строки, требует этот рантайм

:dntknw:

Re: Как создать полноценное приложение *.exe

Добавлено: 24 май 2013, 13:09
gonik
AndreyDmitriev писал(а):Судя по этой ошибке, ваше приложение вообще рантайм не видит. Это с набором выше такая штука выскакивает, или вы сами собрали? Либо в приложении используется что-то, что требует дополнительных файлов из рантайма. Вообще для сложных приложений лучше использовать документированные способы установки. Даже если приложение внешне заводится без проблем, там надо тщательно проверять функциональность на чистой машине, чтобы быть уверенным, что всё работает как надо.

Ошибка выскакивает, когда собрал сам пакет для 2011.
Точно такая же ошибка выскакивает, когда совсем нет никаких дополнительных файлов. Только экзэшник один.
Раньше компилировал действительно емкие программы, но сейчас даже одну! строку без каких-либо функций не могу скомпилировать.
Вечером переставлю лабвью. Вот думаю, какой ставить. 11-й или уже 12?
Меня обеспечили 12-ой версией, но пока не пользовался. 11-ая вполне устраивала.

Re: Как создать полноценное приложение *.exe

Добавлено: 24 май 2013, 13:18
AndreyDmitriev
gonik писал(а):И еще есть кое-что...
Сам не понимаю, как это возможно, но 3 недели назад без всяких танцев с бубнами откомпилировал приложение, которое не требует никаких рантаймов лабвью.
А сейчас даже при компиляции приложения, состоящего только из одной строки, требует этот рантайм

:dntknw:

Так не бывает по определению. Рантайм требуется всегда, независимо от объёма приложения. Три недели назад вы запускали приложение на системе, где рантайм уже стоял. Видимо вы его снесли напрочь. Переустанавливать-то пробовали?
http://joule.ni.com/nidu/cds/view/p/id/2534/lang/en

Что касается 2012 - таки лучше на неё перейти, ибо 2011 глючит до безобразия (но к ошибке выше её глючность никакого отношения не имеет - там у вас в другом проблема)

Re: Как создать полноценное приложение *.exe

Добавлено: 24 май 2013, 16:55
dadreamer
gonik
Проверьте зависимости вашего экзешника с помощью Dependency Walker или утилиты Lister в Total Commander. Она покажет список библиотек, требующихся для работы вашего приложения.