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

Создание приложений, библиотек, инсталляторов
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

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

Сообщение dadreamer »

toshas писал(а):Интересно, а с NXG такое прокатывает ?
Сходу не получилось, очень много зависимостей у экзешника. Эта новая среда на .NET написана, тянет за собой здоровый набор библиотек. Походу это тот момент, когда выигрыш от подобных фокусов сошёл на нет и проще поставить ран-тайм, чем так извращаться.
Аня
beginner
beginner
Сообщения: 27
Зарегистрирован: 25 май 2015, 20:09
Версия LabVIEW: 14.1
Контактная информация:

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

Сообщение Аня »

Недавно мною было написано небольшое приложение для работы с устройством через интерфейс RS232.
Размер директории, сформированной в "Application Builder", составил 2 МБ.
Созданный инсталлятор занял на жестком диске свыше 100 МБ.
Все рекомендуемые компоненты кроме Serial Runtime и LabVIEW Runtime были отключены.

Существуют ли способы, позволяющие значительно ужать размер инсталлятора в LabVIEW?
Artem.spb

Activity Автор
professor
professor
Сообщения: 3393
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

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

Сообщение Artem.spb »

Аня писал(а):Недавно мною было написано небольшое приложение для работы с устройством через интерфейс RS232.
Размер директории, сформированной в "Application Builder", составил 2 МБ.
Созданный инсталлятор занял на жестком диске свыше 100 МБ.
Все рекомендуемые компоненты кроме Serial Runtime и LabVIEW Runtime были отключены.

Существуют ли способы, позволяющие значительно ужать размер инсталлятора в LabVIEW?
все способы-ответы на этот вопрос обсуждаются в этой ветке, почему бы не почитать прежде чем спрашивать?
То, что exe маленький, не значит, что ему не требуется много функций, которые спрятаны в run-time.
Вес рантайма - плата за удобство и размеры exe.
Программа на каком-нибудь .net тоже весит мало, только рантайм там не меньше LV-шного.
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

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

Сообщение dadreamer »

Аня писал(а):Недавно мною было написано небольшое приложение для работы с устройством через интерфейс RS232.
Размер директории, сформированной в "Application Builder", составил 2 МБ.
Созданный инсталлятор занял на жестком диске свыше 100 МБ.
Все рекомендуемые компоненты кроме Serial Runtime и LabVIEW Runtime были отключены.

Существуют ли способы, позволяющие значительно ужать размер инсталлятора в LabVIEW?
Именно ужать - сомнительно, т.к. инсталлер - уже архив, а большой вес оттого, что много базовых компонентов внутри для запуска любого скомпилированного приложения (с учётом отключенных компонентов при сборке). Это ещё у вас мало получилось, весь ран-тайм весит больше 300 МБ (для LV 2018 32/64 бита).

Можете попробовать хак, описанный в данной теме, но раз использована VISA, то потребуется дополнительно определить библиотеки, от которых будет зависеть экзешник (Dependency Walker может облегчить задачу). Точно понадобятся вот эти:
visa32.dll из C:\Windows\System32 (\SysWOW64 для 32-битного приложения на 64-битной ОСи)
NiViAsrl.dll из C:\Program Files\IVI Foundation\VISA\Win64\Bin (C:\Program Files (x86)\IVI Foundation\VISA\WinNT\bin для 32-битного приложения)
Но есть и другие зависимости, их надо найти. У меня, к сожалению, в ближайшие дни нет времени, чтобы этими вещами заняться. Ну, или можете вместо Визы использовать какой-нибудь враппер на WinAPI. Для работы с COM-портом можно взять враппер типа Serial Port API или serpdrv (эти только под LV 32-bit). В таком случае понадобится лишь разместить DLL'ку рядом с экзешником.
PeyNikola
junior
junior
Сообщения: 56
Зарегистрирован: 24 июл 2012, 11:09
Версия LabVIEW: 2011, 202x
Контактная информация:

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

Сообщение PeyNikola »

Что-то на сегодняшний день в Win7 не работает сборка-пример "MiniApp2011.zip" выложенная AndreyDmitriev.
Может кто проверить?
Не могу разобраться в причине.
Выдает ошибку:
Вложения
bnmb.png
7987.png
PeyNikola
junior
junior
Сообщения: 56
Зарегистрирован: 24 июл 2012, 11:09
Версия LabVIEW: 2011, 202x
Контактная информация:

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

Сообщение PeyNikola »

Нашёл одну автономную программу, которая базируется на LabVIEW 7.1.1 Run-Time Engine.
Работает без доп.библиотек (например msvcp90 и msvcr90) и сертификатов
Вложения
SinaProg.zip
(4.06 МБ) 270 скачиваний
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

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

Сообщение dadreamer »

PeyNikola писал(а):Что-то на сегодняшний день в Win7 не работает сборка-пример "MiniApp2011.zip" выложенная AndreyDmitriev.
Проверил на W7 x64 и x32 - всё работает. Проверил также на W10 x64 - тоже работает. 7-ки, правда, давно не обновлял, но 10-ку обновляю регулярно. Сходу сложно сказать, какой-то конфликт библиотек. LV2011 Run-Time Engine установлен? Если да, попробуйте снести его.

Раньше компиляторы попроще были, не тащили за собой столько зависимостей. К примеру, в 3-й / 4-й версиях :labview: ран-тайм вообще был в виде одного файла - кинул в папку с экзешником и готово.
Аватара пользователя
toshas
assistant
assistant
Сообщения: 105
Зарегистрирован: 05 апр 2009, 22:45
Версия LabVIEW: 9.0
Благодарил (а): 13 раз
Поблагодарили: 7 раз
Контактная информация:

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

Сообщение toshas »

dadreamer, пользовался предложенными способами пару лет и все работало отлично.
Недавно потребовалось добавить в программу больше математики - функцию произвольной перестановки элементов массива Riffle Array.
Теперь при запуске .exe на ПК без LV выдается ошибка "lvanlys.dll resource not found".

Взял эту библиотеку по стандартному пути C:\Program Files (x86)\National Instruments\LabVIEW 2014\resource и положил рядом.
Эффекта ноль(

Посмотрел на lvanlys.dll с помощью Dependency Walker, ссылается на LV140000_BLASLAPACK.dll
Их две для разной разрядности
C:\Program Files\National Instruments\Shared\MKL\LV140000_BLASLAPACK
C:\Program Files (x86)\National Instruments\Shared\MKL\LV140000_BLASLAPACK
Положил рядом с .exe ту, что для x64, т.к. система x64.
Результата нет, по прежнему ругается на "lvanlys.dll resource not found".

Подскажите пожалуйста, куда копать дальше ?

На lavag нашел, что lvanlys.dll лишь обертка и может тянуть за собой много библиотек
https://lavag.org/topic/2230-help-problem-with-exe/
Однако, Dependency Walker не видит ничего больше чем LV140000_BLASLAPACK.dll
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

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

Сообщение dadreamer »

toshas
>> Положил рядом с .exe ту, что для x64, т.к. система x64.
Все библиотеки должны быть той же разрядности, что и скомпилированное приложение (как и среда :labview: , в которой это приложение компилировалось). Поэтому, если экзешник 32 бита, то и lvanlys.dll должен быть 32 бита.

В общем, для :labview: 2014 32-bit у меня получился вот такой набор папок и файлов:
English
models
Application.exe
LV140000_BLASLAPACK.dll
lvanlys.dll
lvrt.dll
mesa.dll
nicont.dll
niCPULib.dll
nierInterface.dll (из C:\Windows\System32 на 32-разрядной ОСи; на 64-разрядной папка будет C:\Windows\SysWOW64)
NIQtCore_2014.dll
NIQtGui_2014.dll
QtManager452_2014.dll
tdtable.tdr

Изначально пытался также добавить microsoft.VC90.CRT.manifest, msvcp90.dll и msvcr90.dll, но прога не хочет их использовать, а сразу лезет в C:\Windows\winsxs и берёт либы оттуда. Ну и фиг с ним, пусть берёт. Проверил на чистой 7-ке, указанная функция Riffle из MKL исправно работает.
Аватара пользователя
toshas
assistant
assistant
Сообщения: 105
Зарегистрирован: 05 апр 2009, 22:45
Версия LabVIEW: 9.0
Благодарил (а): 13 раз
Поблагодарили: 7 раз
Контактная информация:

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

Сообщение toshas »

Вот спасибо! Работает!!

пара комментариев:
1) nicont.dll - похоже лишний, работает и без него
2) lvanlys.dll и LV140000_BLASLAPACK.dll должны лежать рядом.
Упаковщик по умолчанию рядом с .exe создает папку data в которую кладет lvanlys.dll
(lvanlys.dll при этом взят из C:\Program Files (x86)\National Instruments\LabVIEW 2014\resource).
Так вот, LV140000_BLASLAPACK.dll нужно положить в эту же папку или вообще папку data снести и оба dll файла положить рядом с .exe
(LV140000_BLASLAPACK.dll должен быть взят из C:\Program Files (x86)\National Instruments\Shared\MKL\LV140000_BLASLAPACK)

p.s. пути указаны для LV2014 32-bit и Win7 x64
Аватара пользователя
Select
developer
developer
Сообщения: 281
Зарегистрирован: 12 дек 2017, 23:56
Версия LabVIEW: 18
Откуда: Врата надежды.
Поблагодарили: 2 раза

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

Сообщение Select »

Мой инсталлер после максимальных отключений весит 200 mb, папка с аппликацией 9 mb, добавил в сборку NIUninstaller , установщик драйвера под 232 кабель.
в выборке тулсов взял 4 опции,
Run Time eng;
NI VC2010MSMs;
NI Serial Run Time;
Ni Visa Run Time 14.

У меня вся компиляция на 14 и на 18 проходит без глюков в 1 клик. Создание исходного exe(шника) и инсталлера.
3 дня до упора заливал и сносил на таблет с разным наполнением, добился минимального размера загрузчика.
Все хорошо кроме одного, никак не въеду как забить пароль и его запрос на инсталлере в процессе установки приложения. :dntknw:
Я уже думал над созданием функции в виде процедуры, которая будет в процессе запуска после инсталяции выкидывать запрос пароля на сравнение с привязкой на отключение этого окна. Но это полумера, после честного снятия пароля, все пойдет в тираж... :think:
На NI в этой теме не густо. Один юзер дал тот алгоритм, о котором я написал - привязка проектного кода к железу с сообщением админу данных и предоставлением ключа.
Попробую нарыть в нодах mac зацепку...
LabView 14,18
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

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

Сообщение dadreamer »

Select, вообще, эта тема не для обсуждения создания инсталлеров LV, здесь мы наоборот уходим от их создания с помощью хака с подсовыванием библиотек.

AFAIK, инсталлер, создаваемый :labview: , нельзя защитить паролем: https://forums.ni.com/t5/LabVIEW-Idea-E ... anguage=en
Советы могут быть такие:
1. Использовать тулкит для лицензирования Third-Party Licensing and Activation Toolkit: http://sine.ni.com/nips/cds/view/p/lang/ru/nid/209107 Как по мне, эта штука не очень надёжная, расписывать не буду, т.к. у нас правила, просто примите на веру :)
2. Упаковать инсталлер в архив, на который повесить пароль. Почему бы и нет, но юзер потом всё равно растиражирует, если ему надо.
3. Перейти на сторонний инсталлер, например Inno Setup, где есть возможность установки пароля. Плюс: юзер не вскроет инсталлер, т.к. там хэш MD5 с солью, т.е. в чистом виде инсталлер не взять. Минус: юзер может взять установленные файлы и сделать с ними, что угодно.

Да и вообще, против лома нет приёма. Защищать сам инсталлер бессмысленно. Лучше проработать вменяемую систему лицензирования самого софта, с ключами и прочим. Это всё равно не панацея на 100%, но юзеров среднего уровня остановит от "копания" в коде.
Аватара пользователя
Select
developer
developer
Сообщения: 281
Зарегистрирован: 12 дек 2017, 23:56
Версия LabVIEW: 18
Откуда: Врата надежды.
Поблагодарили: 2 раза

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

Сообщение Select »

Лучше проработать вменяемую систему лицензирования самого софта, с ключами и прочим.
Я пошел именно по такому пути с ключом и аппаратной привязкой.
LabView 14,18
Аватара пользователя
toshas
assistant
assistant
Сообщения: 105
Зарегистрирован: 05 апр 2009, 22:45
Версия LabVIEW: 9.0
Благодарил (а): 13 раз
Поблагодарили: 7 раз
Контактная информация:

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

Сообщение toshas »

[quote=="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.

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

Появилась необходимость повторить на Ubuntu 16.04 x64 и LV 2014 x64.
При попытке запуска:
"No supported languages installed!"
"Unable to open resource files"

dadreamer, не подскажете, что не так ?

Разобрался, в папке English не хватало lvapp.rsc из папки /usr/local/natinst/LabVIEW-2014-64/AppLibs/
Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1236
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Версия LabVIEW: 2013-2020
Благодарил (а): 23 раза
Поблагодарили: 30 раз
Контактная информация:

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

Сообщение Kosist »

Select писал(а):
Лучше проработать вменяемую систему лицензирования самого софта, с ключами и прочим.
Я пошел именно по такому пути с ключом и аппаратной привязкой.
Перефразируя легендарную фразу - "Все уже придумано до нас".
Если софт будет продаваться, то можно купить готовое решение, и не париться. Екзешники можно лицензировать при помощи Third-Party Licensing and Activation Toolkit. Правда, нужен SOLO сервер и аккаунт платный, но зато если разбить его стоимость в каждую единицу проданного приложения, то может быть выгодно (зависит от объема продаж).
А аппаратная привязка - это баловство до поры до времени. Железо недолговечно, а потом нужно будет голову ломать - действительно ли у них полетел жесткий диск/еще чего-то, или они новую систему хотят установить.
Мы делили апельсин - много наших полегло...
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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