Как запустить приложение (*.exe) без установки Run-Time

Создание приложений, библиотек, инсталляторов
gonik
beginner
beginner
Сообщения: 48
Зарегистрирован: 27 авг 2009, 15:07
Репутация: 0
Версия LabVIEW: 8.5
Контактная информация:

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

Сообщение gonik »

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

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

В общем, не знаю, как так получилось, но приложения действительно работают по-разному на одном и том же пк.
Проблема решилась переустановкой :labview: с 2011 до 2012 и использованием папки с Вашим набором.
Еще раз большое спасибо, Андрей!

gonik
beginner
beginner
Сообщения: 48
Зарегистрирован: 27 авг 2009, 15:07
Репутация: 0
Версия LabVIEW: 8.5
Контактная информация:

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

Сообщение gonik »

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

Уважаемый dadreamer, интересная программа. Но показывает неимоверное количество используемых библиотек dll. Где их искать и как привязывать к экзэшнику мне не совсем понятно.
Проблема решилась переустановкой :labview: до версии 2012 и использованием папки со сборкой Андрея (см. выше).
Спасибо всем, кто остался неравнодушным!

Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3508
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Репутация: 0
Версия LabVIEW: 2.5 — 2020
Контактная информация:

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

Сообщение dadreamer »

gonik писал(а):Но показывает неимоверное количество используемых библиотек dll.

Так это всё библиотеки Windows, и их не так много, как вам кажется:
Без имени-2.jpg
Без имени-2.jpg (61.21 КБ) 16017 просмотров

Однако не показывает зависимости от рантайма, также как и Lister. Значит, я ошибся, дав тот совет, по всей видимости, рантайм грузится динамически. Через Process Monitor видны LabVIEW'шные библиотеки, правда вывод инфы большой, нужно долго анализировать.

AndreyDmitriev

Activity Professionalism Tutorials Gold Black
VIP
VIP
Сообщения: 1225
Зарегистрирован: 03 фев 2010, 00:42
Награды: 6
Репутация: 0
Версия LabVIEW: 6.1 - 2016
Откуда: Германия
Контактная информация:

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

Сообщение AndreyDmitriev »

dadreamer писал(а):Однако не показывает зависимости от рантайма,

Нажмите F7

dep1.png

И почувствуйте разницу:

dep2.png

Zavodila
interested
interested
Сообщения: 9
Зарегистрирован: 17 ноя 2011, 16:53
Репутация: 0
Версия LabVIEW: 10
Контактная информация:

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

Сообщение Zavodila »

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


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

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

Все отлично работает XP SP3. Спасибо! :super:

dimedrol
beginner
beginner
Сообщения: 13
Зарегистрирован: 02 мар 2010, 22:31
Репутация: 0
Версия LabVIEW: 8.2
Контактная информация:

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

Сообщение dimedrol »

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 (плюс я прошёлся по файлам упаковщиком - это не нарушило работоспособность) - попробуйте кому не лень на разных системах.


Спасибо за предложенное решение, очень вовремя нашел =)

должен отметить, что на 64-битной :labview: ничего не получилось, даже если в microsoft.VC90.CRT.manifest поменять аржитектуру на х64, сборка библиотек прямо в ехе файл тоже не помогла
После установки 32-битной :labview: вручную из папки, куда была установлена :labview:, вытаскивал указанные в мануале файлы, :vi: которые использовал в программе своей паковал прямо в ехе файл (linear Fit, Mean и другие стандартные подприборы).
Для того, чтобы отдельные стандартные :vi: положить в ехе файл я добавил библиотеки NI_AALbase и NI_AALpro в файл проекта и при создании самого ехешника в окне Sourse FIles вытаскивал из этих библиотек нужные подприборы в окно Always Included, в таком случае заработало (положить просто стандартный подприбор рядом с ехе ожидаемо не прокатило)

Надеюсь, кому то поможет

AndreyDmitriev

Activity Professionalism Tutorials Gold Black
VIP
VIP
Сообщения: 1225
Зарегистрирован: 03 фев 2010, 00:42
Награды: 6
Репутация: 0
Версия LabVIEW: 6.1 - 2016
Откуда: Германия
Контактная информация:

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

Сообщение AndreyDmitriev »

dimedrol писал(а):Спасибо за предложенное решение, очень вовремя нашел =)

должен отметить, что на 64-битной :labview: ничего не получилось, даже если в microsoft.VC90.CRT.manifest поменять аржитектуру на х64, сборка библиотек прямо в ехе файл тоже не помогла


На здоровье! Сами библиотеки (я о DLL) тоже, надо полагать, на 64-х битные версии заменили? И вот любопытно — что значит "сборка библиотек прямо в ехе файл"?

dimedrol
beginner
beginner
Сообщения: 13
Зарегистрирован: 02 мар 2010, 22:31
Репутация: 0
Версия LabVIEW: 8.2
Контактная информация:

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

Сообщение dimedrol »

AndreyDmitriev писал(а):
На здоровье! Сами библиотеки (я о DLL) тоже, надо полагать, на 64-х битные версии заменили? И вот любопытно — что значит "сборка библиотек прямо в ехе файл"?


Заменял, не помогало, да и весили они на много больше чем в 32-битной версии: сборка под 64 готовая со всем библиотеками около 200 метров весила, аналогичная под 32 - уже 35 Мб. Не знаю какими уж путями разработчики обеспечили совместимость с 64, но про объемы они не парились особо видимо (хотя я, к сожалению, не знаю как обычно допиливают совместимость под 64).

"сборка библиотек прямо в ехе файл"- я имел ввиду, что просто положить стандартные приборы (например, Mean, Linear Fit и др.) рядом с ехе файлом естественно не вышло, всю библиотеку приборов "прикладывать" так же(да и не в dll они упакованы)... Вот и пришлось, сначала добавить нужные библитеки в файл проекта. В таком случае они будут видны в разделе Sourse Files. А вот от туда я из них включал в ехе файлик в поле Always Include нужные стандартные :vi: . Итого: рядом с ехе файлом никаких библиотек, кроме динамических, а все необходимые подприборы, как мои, так и стандартные, оказались в готовом приложении.

Ну вот как-то так. Наверное, из необходимых :vi: можно сделать отдельную dll и рядом положить, но есть сомнение в таком решении...

AndreyDmitriev

Activity Professionalism Tutorials Gold Black
VIP
VIP
Сообщения: 1225
Зарегистрирован: 03 фев 2010, 00:42
Награды: 6
Репутация: 0
Версия LabVIEW: 6.1 - 2016
Откуда: Германия
Контактная информация:

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

Сообщение AndreyDmitriev »

dimedrol писал(а): Заменял, не помогало, да и весили они на много больше чем в 32-битной версии: сборка под 64 готовая со всем библиотеками около 200 метров весила, аналогичная под 32 - уже 35 Мб.


Чего-то вы там напутали, коллега Димедрол.

Во-первых, для того, чтобы Mean и другие мат. функции попали в исполняемый файл, никаких дополнительных телодвижений принимать не надо - они по умолчанию туда автоматом попадают, как и всё, что в разделе Dependencies. Если каждый раз при добавлении новых функций на диаграмму, добавлять их в проект - легче застрелиться. :suicide:

Во-вторых, вы не заметили того факта, что библиотеке lvanlys.dll требуется восьмая версия майкрософтовского рантайма, кроме того, не заметили, что этот файл требует себе ещё одной библиотеки из MKL.

В-третьих, в манифесте архитектура задаётся строкой amd64, а не x64, как кажется на первый взгляд.

Таким образом, минимальный набор файлов для запуска шестидесятичетырёхбитного приложения, использующего функции, требующие lvanlys.dll, выглядит как-то вот так:

min.png
min.png (9.68 КБ) 15828 просмотров
Вложения
MiniApp2012x64.zip
(20.56 МБ) 307 скачиваний

dimedrol
beginner
beginner
Сообщения: 13
Зарегистрирован: 02 мар 2010, 22:31
Репутация: 0
Версия LabVIEW: 8.2
Контактная информация:

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

Сообщение dimedrol »

AndreyDmitriev писал(а):Чего-то вы там напутали, коллега Димедрол.


согласен, напутал... на ПК, который использовал для тестирования, оказалось, что остался файлик из директории MKL, остался он там после того, как его туда положил инсталлятор, а после удаления не убрал ( да и остального мусора много оставил). потому и пришлось колдовать с укладкой подпрограмм внутрь ехе файлика. Ну вот требовала программа эти подприборы, пришлось как-то выходить из ситуации, на другом ПК( совсем чистом от :labview: ) естественно не запустилось, но:
если сделать вручную в нужном месте директорию с MKL папкой и файлом соответствующим, то работает
C:\Program Files (x86)\National Instruments\Shared\MKL\LV120000_BLASLAPACK
а если просто рядом с приложением положить LV120000_BLASLAPACK.dll, то запускаться не хочет ( а у Вас она в списке рядом лежит, или я не правильно что-то понял) Завтра пересоберу комплект, не все пока для меня пронятно(

AndreyDmitriev писал(а):библиотеке lvanlys.dll требуется восьмая версия майкрософтовского рантайма

вот тут не понял, где его брать или кто он из вышего списка?

Попробовал Вашу сборку, на 64-системе все норм (свою прогу правда забыл потестить, завтра займусь), а на 32-разрядной ожидаемо выдало сообщение о несовместимости разрядности, так что общий вывод ИМХО: в случае создания приложения "не для себя" про 64 лучше забыть, т.к. 32-разрядная версия на любой запустится, а 64 уже нет.
(Хотя интересен вопрос о производительности в разных случаях)

AndreyDmitriev

Activity Professionalism Tutorials Gold Black
VIP
VIP
Сообщения: 1225
Зарегистрирован: 03 фев 2010, 00:42
Награды: 6
Репутация: 0
Версия LabVIEW: 6.1 - 2016
Откуда: Германия
Контактная информация:

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

Сообщение AndreyDmitriev »

LV120000_BLASLAPACK.dll должна лежать там же, где и lvanlys.dll. По умолчанию LabVIEW этот файл в папку \data загоняет и там же приложение его будет искать. Если хочется все файлы сложить в корневую директорию, то это дело можно в билдере поправить (destinations->support files), иначе окошко поиска библиотеки будет выскакивать

То, что программа требовала подприборы - это потому, что она не могла найти библиотеки, используемые в этих подприборах. Сами подприборы в исполняемом файле были.
Если класть файл в C:\Program Files (x86)\National Instruments\Shared\MKL\LV120000_BLASLAPACK - то сама суть идеи пропадает - тогда проще уж рантайм поставить и не заморачиваться.

рантайм VC для lvanlys.dll - это файлы msvcp80 и msvcr80 - их проще всего брать из %windir%\winsxs

64 бит приложение работать под 32 бит windows не будет. Однако 32 бит приложение будет работать в 64 бит windows в 32-х битном режиме.
Выигрыш в производительности от 64 бит приложения будет небольшой (ну процентов до 10-15 можно ожидать).

dimedrol
beginner
beginner
Сообщения: 13
Зарегистрирован: 02 мар 2010, 22:31
Репутация: 0
Версия LabVIEW: 8.2
Контактная информация:

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

Сообщение dimedrol »

AndreyDmitriev писал(а):LV120000_BLASLAPACK.dll должна лежать там же, где и lvanlys.dll. По умолчанию LabVIEW этот файл в папку \data загоняет ...


Спасибо :super:
LV120000_BLASLAPACK.dll положил в папку \data и рантаймы из папки виндовса скопировал, и никакого колдовства больше не надо было
теперь вроде все работает ))

Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3508
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Репутация: 0
Версия LabVIEW: 2.5 — 2020
Контактная информация:

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

Сообщение dadreamer »

Ради интереса проверил аналогичный финт на Linux (Ubuntu 15.04 x64, :labview: 2014 x64). Получилось ещё меньше зависимостей, чем на Windows. В моём случае потребовались вот такие папки и файлы:
English
models
liblvrt.so.14.0 (переименованный liblvrt.so.14.0.0)
libniCPULib.so (переименованный libniCPULib.so.14.0.0)
tdtable.tdr
Ожидал, что си-шный ран-тайм запросит, но почему-то не стал. Возможно, на чистой ОСи всё-таки понадобится.

upd: нет, не просит, проверил на чистой Убунте 15.04.

На Маке пока не пробовал, если будет время, постараюсь проверить.

Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3508
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Репутация: 0
Версия LabVIEW: 2.5 — 2020
Контактная информация:

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

Сообщение dadreamer »

Сегодня понадобилось проделать этот фокус для мелкой прожки на :labview: 2018 x64. Оказалось, что с некоторых пор NI перешли на Visual Studio 2015, в котором ввели такую штуку как универсальный CRT. Поэтому для запуска и дальнейшей работы экзешника требуется либо поставить Распространяемый компонент Microsoft Visual C++ 2015 (Redistributable), либо положить рядом с .exe вот такой вот минимальный ран-тайм комплект:
api_ms_win_core_console_l1_1_0.dll
api_ms_win_core_datetime_l1_1_0.dll
api_ms_win_core_debug_l1_1_0.dll
api_ms_win_core_errorhandling_l1_1_0.dll
api_ms_win_core_file_l1_1_0.dll
api_ms_win_core_file_l1_2_0.dll
api_ms_win_core_file_l2_1_0.dll
api_ms_win_core_handle_l1_1_0.dll
api_ms_win_core_heap_l1_1_0.dll
api_ms_win_core_interlocked_l1_1_0.dll
api_ms_win_core_libraryloader_l1_1_0.dll
api_ms_win_core_localization_l1_2_0.dll
api_ms_win_core_memory_l1_1_0.dll
api_ms_win_core_namedpipe_l1_1_0.dll
api_ms_win_core_processenvironment_l1_1_0.dll
api_ms_win_core_processthreads_l1_1_0.dll
api_ms_win_core_processthreads_l1_1_1.dll
api_ms_win_core_profile_l1_1_0.dll
api_ms_win_core_rtlsupport_l1_1_0.dll
api_ms_win_core_string_l1_1_0.dll
api_ms_win_core_synch_l1_1_0.dll
api_ms_win_core_synch_l1_2_0.dll
api_ms_win_core_sysinfo_l1_1_0.dll
api_ms_win_core_timezone_l1_1_0.dll
api_ms_win_core_util_l1_1_0.dll
api_ms_win_crt_conio_l1_1_0.dll
api_ms_win_crt_convert_l1_1_0.dll
api_ms_win_crt_environment_l1_1_0.dll
api_ms_win_crt_filesystem_l1_1_0.dll
api_ms_win_crt_heap_l1_1_0.dll
api_ms_win_crt_locale_l1_1_0.dll
api_ms_win_crt_math_l1_1_0.dll
api_ms_win_crt_multibyte_l1_1_0.dll
api_ms_win_crt_private_l1_1_0.dll
api_ms_win_crt_process_l1_1_0.dll
api_ms_win_crt_runtime_l1_1_0.dll
api_ms_win_crt_stdio_l1_1_0.dll
api_ms_win_crt_string_l1_1_0.dll
api_ms_win_crt_time_l1_1_0.dll
api_ms_win_crt_utility_l1_1_0.dll
concrt140.dll
msvcp140.dll
ucrtbase.dll
vcamp140.dll
vccorlib140.dll
vcomp140.dll
vcruntime140.dll

:D
Все эти файлы можно достать с компа, на котором Redist уже установлен - инструкция. Манифесты никакие больше не надо прикладывать.
Ну, и плюс папки/файлы от NI в таком составе:
English
errors (чтоб Error Handler показывал окно LV с описанием ошибки, а не undefined-заглушку)
models
[программа].exe
lvrt.dll
mesa.dll
nicont.dll
niCPULib.dll
nierInterface.dll
NILVRuntimeManager.dll (для отображения диалогов об отсутствующих либах при запуске; хотя запускается и без этого файла)
NIQtCore_2018.dll
NIQtGui_2018.dll
QtManager452_2018.dll
tdtable.tdr

Аватара пользователя
toshas
junior
junior
Сообщения: 65
Зарегистрирован: 05 апр 2009, 22:45
Репутация: 0
Версия LabVIEW: 9.0
Контактная информация:

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

Сообщение toshas »

Интересно, а с NXG такое прокатывает ?

Ответить

Вернуться в «Создание приложений»