Многооконное приложение

Создание приложений, библиотек, инсталляторов
Elen
beginner
beginner
Сообщения: 46
Зарегистрирован: 15 окт 2014, 07:27
Версия LabVIEW: 2013
Контактная информация:

Многооконное приложение

Сообщение Elen »

Здравствуйте, профи!

Подскажите решение следующей проблемы.
У меня есть проект, состоящий из главного VI, нескольких динамически подключаемых VI и используемых в них различных SubVI.
Но созданный exe-ник не хочет работать, если рядом с ним нет всех динамически подключаемых VI и используемых в них различных SubVI.
Как создать нормальный исполняемый файл, чтобы на ПК заказчика было достаточно установить инсталлятор и мой exe-ник (без VI)? Или это в принципе в LabView невозможно?
Аватара пользователя
Kosist

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

Re: Многооконное приложение

Сообщение Kosist »

В :labview: возможно все )) Ну, или почти все ))
При создании exe (который, собственно, потом будет использоваться для инсталлера), динамически вызываемые виайки указывайте как Always included (в разделе Source Files). Таким образом, после сборки екзешника, они тоже будут присутсвувать там. Но - если вы формируете путь к виайкам динамически, учтите этот момент при конфигурации exe. В разделе Source File Settings следует указать, куда именно помещать динамически вызываемые виайки (Source File Settings -> Кликаете на виайку из списка -> Destination).
Например, я вызываю динамические виайки, и формирую путь к ним следующим образом: путь к папке с главной виайкой + имя папки с "динамическими" виайками (напр., dynamic) + имя виайки. Сами виайки я создаю, и сохраняю в папку dynamic. Но при создании екзе, у меня не будет такой папки. Я должен ее добавить. В конфигурации екзе, в пункте Destinations, кликните на плюс, и введите имя папки с динам. вызываемыми виайками (в моем случае, dynamic). Все, папка создана. Теперь на вкладке Source File Settings я могу кликнуть на динам. вызываемую виайку (или вообще на папку с ними, т.к. они будут отображаться все вместе в папке), и выбрать Destination -> dynamic.
После создания екзе, в папке с исполняемым файлом будет папка dynamic. Но если вы храните все виайки в одной папке, то просто добавляйте их как Always included.
Мы делили апельсин - много наших полегло...
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

Re: Многооконное приложение

Сообщение Vitekkz88 »

Elen писал(а):У меня есть проект, состоящий из главного VI, нескольких динамически подключаемых VI и используемых в них различных SubVI.
А Вы каким образом пути для динамических .vi указываете? Ознакомьтесь:
http://digital.ni.com/public.nsf/allkb/ ... F4006BE363
Так же при настройке сборки .ехе необходимо указывать StartUP vi's(главное окно приложения), а в Always Included надо переместить динамически вызываемые .vi . SubVI подхватятся автоматически, их перетаскивать в Always Included нет необходимости.
Чтобы на ПК заказчика было достаточно установить инсталлятор и мой exe-ник (без VI)
Installer тоже собирайте в LabVIEW и включайте в сборку ранее созданный и проверенный .exe .
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

Re: Многооконное приложение

Сообщение Borjomy_1 »

Проблема может быть в том, что когда вы указываете путь к VI под средой - он один, а когда VI лежит в экзешнике, путь, соответственно, другой. В этом пути экзешник еще присутствует, это надо учитывать.
а в Always Included надо переместить динамически вызываемые .vi
- а вот в этом нет необходимости, вообще ничего больше в инсталляторе добавлять не надо, папки и прочее, если VI-ка указана таким образом, как показано на рисунке. Данный способ гарантирует, что вы получите и актуальный путь и VI (со всеми подфункциями) автоматически будет включено в исполняемый файл.
Вложения
Имя VI.PNG
Имя VI.PNG (1.94 КБ) 11688 просмотров
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

Re: Многооконное приложение

Сообщение Vitekkz88 »

а вот в этом нет необходимости, вообще ничего больше в инсталляторе добавлять не надо, папки и прочее, если VI-ка указана таким образом, как показано на рисунке.
А если не указана!?
А если сделать по вашему варианту и всё равно в Always Included(Build exe) добавить динамические .vi? Неужели всё сломается? А если кроме .vi есть еще и другие компоненты для включения в сборку?Тоже не добавлять?
Да и осознанно включать в Always Included необходимые данные гораздо удобней и наглядней. Особенно когда проект нормально организован без всякого хлама и бардака.
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

Re: Многооконное приложение

Сообщение Borjomy_1 »

Да и осознанно включать в Always Included необходимые данные гораздо удобней и наглядней.
Зачем? абсолютно бессмысленное занятие. Что указано в Always Included, что нет... В любом случае будет добавлено в экзешник (те :vi: , которые явно используются, естественно).
Ну а потом... вы добавили :vi: в Always Included, а потом от нее отказались, например, заменив другой. Она так и будет там потом телепаться? Как их потом оттуда выковыривать? Это каждую потом надо открыть отдельно и проверить, используется ли она. У меня в одном из проектов таких функций с десяток. Это будет застрелиться, если я все их буду складывать вручную. И это даже меньшее из зол. А что будет, если проект будет перенесен в другой каталог? Пути-то константами заданы. Все это потом искать и править надо.

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

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

Re: Многооконное приложение

Сообщение Vitekkz88 »

Пути-то константами заданы. Все это потом искать и править надо.
о_О какими констанми? Ничего подобного. Вон, выше по ссылке я привел как делать можно и без констант. Можно по вашему. Но это только для .vi
Что указано в Always Included, что нет... В любом случае будет добавлено в экзешник (те :vi: , которые явно используются, естественно).
А я не только про .vi говорил! Внимательней читайте!Может у Вас есть аналогичный рецепт для добавления html-справки или другой документации без Always Included? Может есть решение, чтоб все использованные .dll подхватывались? Вот что-то я не заметил, что LabVIEW любезно стягивает .dll из VisualStudiо с необходимыми зависимостями. На днях сам добавлял ручками msvcr110d.dll в Always Included.
На счет большого кол-ва .vi . Если Вы их поштучно добавляете - то это действительно беда. Обычно делают папку...знаете Create Folder -> Autopopulating и т.д. Папку закидывают хоть с over100500 функциями. И ничего телепаться не будет :D
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

Re: Многооконное приложение

Сообщение Borjomy_1 »

Справки и прочее - да, несомненно, ручками добавлять. я сейчас только про динамически вызываемые :vi: писал и именно в этом применении. И по вашей ссылке рассказывается, как получить путь к самой :vi:, где этот путь используется, а не другой.

Что касается Autopopulating, то открываться проект с тремя сотнями только мной написанных VI будет ну очень долго. Я пробовал - мне не понравилось. В этом случае я не могу хранить разные функционалы в одной llb, например. А так я их по виртуальным папкам раскидываю- это наглядно и весь проект можно держать в одной библиотеке. Функции, которые не используются, надо физически удалять из каталога, что тоже неудобно, а так они замусоривают проект.
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

Re: Многооконное приложение

Сообщение Vitekkz88 »

я сейчас только про динамически вызываемые писал и именно в этом применении.
А, теперь понятно. Меня смутило это: вообще ничего больше в инсталляторе добавлять не надо, папки и прочее. Прям усиление на первых словах)
Ничего против не имею llb и виртуальных папок. Использовал, устраивает)У меня не было проектов с 300 .vi. До сотни обычно укладывался. И получалось как раз 8-10 тематических папок по 10 - 12 .vi в каждой. Загружалось вполне нормаль. Да и дело привычки наверно...
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
Аватара пользователя
dadreamer

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

Re: Многооконное приложение

Сообщение dadreamer »

Vitekkz88 писал(а):На днях сам добавлял ручками msvcr110d.dll в Always Included.
d в конце - это же отладочная версия. Что бы там ни было, надо было в Release-конфигурации компилировать. А потом достаточно поставить пакет(ы) Microsoft® Visual C++ Redistributable в ОС, вроде бы даже рантайм :labview: их ставит.
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

Re: Многооконное приложение

Сообщение Vitekkz88 »

dadreamer писал(а):Что бы там ни было, надо было в Release-конфигурации компилировать.
Ничего подобного. Зависимость та же самая, но только без буквы "d".
И рантайм LabVIEW не ставит Microsoft® Visual C++ Redistributable.
Использование VS с их зависимостями и не имея их в сборке увеличивает потенциальную возможность попадания впросак. Поэтому стОит все необходимые зависимости собирать вместе с проектом. И делать ставку на наличие Redistributable тоже не стоит. Вон, форумы пестрят подобными темами. Всех дружно отправляют скачивать этот самый Redistributable либо эту(подобную) .dll на msdn-е.
Вложения
Error.png
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
Аватара пользователя
dadreamer

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

Re: Многооконное приложение

Сообщение dadreamer »

Vitekkz88 писал(а):Ничего подобного. Зависимость та же самая, но только без буквы "d".
Так о чём я и говорю: debug-версии идут в комплекте с самой IDE (Visual Studio, например), отдельного пакета для них нет. А release-версии распространяются в том числе и в Redist-пакетах. Так что если есть зависимость, то пусть лучше она будет от release-версии, нежели от debug. И по идее инсталлер программы, использующей функции MSVC, обязан поставить Redistributable-пакет, чтобы обезопасить себя от отсутствия нужных библиотек. Так делают многие программы, написанные на C, и это считается нормой, также как установка .NET Framework для # приложений. И если у вас какие-то библиотеки имеют такие зависимости, то инсталлер экзешника должен поставить Redist пакет.
А скачивать откуда-то недостающие библиотеки чревато тем, что основная программа может вылететь из-за несоответствия версий или внутренних различий (другие зависимости, другой состав функций, более старый или более новый код и прочее).
Не могу сейчас проверить, как ставится рантайм :labview: , так как у меня давно уже установлено множество версий :labview: и соответственно MSVC пакетов. Может быть, для lvrt он и не нужен. Но ничего плохого не вижу в том, чтобы на компе были эти самые пакеты, ведь они абсолютно никак не мешают, и даже способствуют запуску потенциальных приложений. У меня на домашнем компе вот это всё стоит (поставилось само с разными программами):
Вложения
2015-02-12_0-26-44.jpg
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

Re: Многооконное приложение

Сообщение Vitekkz88 »

А скачивать откуда-то недостающие библиотеки чревато тем, что основная программа может вылететь из-за несоответствия версий или внутренних различий (другие зависимости, другой состав функций, более старый или более новый код и прочее)
Ой данупрям) Это прям как если программа ругается на отсутствие msvcr110d.dll, а взяли и скачали msvcr80.dll - так что ли?
Вариантов не много - под win 2 разрядности, так что "или-или". Никаких последствий я не встречал. Можете рассказать из своего опыта - с интересом послушаю. Как одна и таже .dll в рамках одной версии меняет своё содержимое.
Но ничего плохого не вижу в том, чтобы на компе были эти самые пакеты, ведь они абсолютно никак не мешают, и даже способствуют запуску потенциальных приложений
А я и не говорю, что это плохо. Есть - хорошо. На рабочем компьютере у меня стоят версии Redistributable начиная с 2005. И ставились они при установке MSVS(2005, 2010, 2012).
Ну а если сборка дебажная была? Вот как у меня на днях и случилось. Ну не было у меня под рукой MSVS для перекомпиляции проекта и тем более Redistributable, уж так сложилось. Зато был доступ в интернет, от туда скачал одну .dll . Никаких вылетов и последствий не наблюдалось. Не знаю как Вы, но я не надеюсь на то, что если у вас какие-то библиотеки имеют такие зависимости, то инсталлер экзешника должен поставить Redist пакет. Да ничего он не должен. Кто вам такое сказал?Да и Run-Time Run-Time-у рознь. Либо сам подсовывай, либо качай и устанавливай либо включай в сборку .dll . Все варианты имеют право на жизнь. Первый исключает таскание .dll для релиз версии. Второй исключает абсолютно все возможные ньюансы(релиз-дебаг) или глюки первого варианта(не той версии Redistributable установлен, а может его и вовсе нет например).
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
Аватара пользователя
dadreamer

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

Re: Многооконное приложение

Сообщение dadreamer »

Это прям как если программа ругается на отсутствие msvcr110d.dll, а взяли и скачали msvcr80.dll - так что ли?
Вот гипотетический пример. Допустим, у вашей библиотеки зависимость от msvcr*.dll. По мере работы программы вызывается функция F1 и она есть в msvcr*.dll. Но в редких случаях вызывается F2, которая тоже есть в msvcr*.dll, но она требует динамической загрузки другой dll из redist пакета. Вы проверяете работу программы на компе с IDE, и там конечно всё будет работать, т.к. все библиотеки в наличии. На целевом ПК вы прогнали экзешник пару-тройку раз, и вроде бы тоже всё ок. Но когда настанет тот редкий случай и вызовется F2, то программа просто слетит, т.к. на целевом ПК не будет зависимостей, нужных msvcr*.dll (пакет не установлен).
Можете рассказать из своего опыта - с интересом послушаю.
Пару раз сталкивался, но такое не часто бывает, всё не запомнишь, и анализировать все зависимости некогда бывает. Вы можете смоделировать ситуацию, описанную выше, и сделать выводы.
Не знаю как Вы, но я не надеюсь на то, что если у вас какие-то библиотеки имеют такие зависимости, то инсталлер экзешника должен поставить Redist пакет. Да ничего он не должен. Кто вам такое сказал?
Потому что это ваш инсталлер должен сделать. Вы же ставите на целевые системы Run-Time :labview: , так почему вы хотите пренебречь ран-таймом VC? Он по каким-то причинам не достоин этого? :brows: Тогда и ран-тайм LabVIEW не ставьте, копируйте на конечные компы все библиотеки-зависимости LV (lvrt.dll и т.д.) по мануалу с форума. Я понимаю, если это отладочные действия, как вы описали, когда нет времени или возможности что-то скачать и поставить. Но законченный продукт должен содержать в себе всё для его корректной работы. Либо это возлагается на конечного пользователя, но должно быть описано в инструкции по использованию продукта. И, повторюсь, большинство качественных продуктов ставят все эти пакеты или докачивают из инета в автоматическом режиме (в т.ч. многие игрушки, ПО для работы с графикой, фаерволлы, антивирусы).
Либо сам подсовывай
Офф-топ уже, конечно, но так доподсовываете, скачаете эксплойт какой-нибудь, в результате трояны загрузятся. Много в инете всяких фейковых сайтов, предлагающих скачать dll, а на деле там чёрт знает что.
Elen
beginner
beginner
Сообщения: 46
Зарегистрирован: 15 окт 2014, 07:27
Версия LabVIEW: 2013
Контактная информация:

Re: Многооконное приложение

Сообщение Elen »

Господа профи - break!!!

Вы залезли в такие дебри, что мне - человеку, который первый раз реализует проект на LabView, стало даже как-то нехорошо.
Если я правильно поняла, то если в моем проекте есть динамически подключаемые VI, то они все равно в конечном счете должны находиться физически на компе (в зависимости от варианта сборки - в отдельной папке или в той же, где расположен exe-ник). Т.е. любой может забрать Vi-ки и что-то в них изменить - поэтому они и "динамически подключаемые".
А меня интересует вопрос - можно ли на LabView реализовать многооконное приложение (окна вызываются по нажатию пользователем на кнопки в главном окне) так, чтобы на компе у пользователя находился только exe-ник (естественно при наличии установленного инсталлера)???

Заранее спасибо
Ответить

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