Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Перезапуск приложения. / 19 сообщений из 19, страница 1 из 1
25.02.2017, 23:05
    #39410251
Dryundel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перезапуск приложения.
Требуется закрыть приложение и запустить его вновь с новым документом.
Пытаюсь сделать это через:

Код: vbnet
1.
2.
Shell "taskkill.exe /f /im app.exe"
Shell "C:\Program\app.exe C:\1.cmx", vbNormalNoFocus



Процесс убивается на ура, а вот заново не запускается. Видимо taskkill.exe убивает и запускаемый процесс. Вероятно надо остановить выполнение taskkill.exe , но вот как это сделать?
...
Рейтинг: 0 / 0
25.02.2017, 23:18
    #39410258
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перезапуск приложения.
Shell запускается асинхронно. Так что нужно либо дождаться завершения первого вызова функции, и только потом делать второй, либо использовать синхронные методы запуска дочернего процесса. Простейшим вариантом вижу цепное выполнение команд:
Код: vbnet
1.
Shell "taskkill.exe /f /im app.exe && C:\Program\app.exe C:\1.cmx", vbNormalNoFocus
...
Рейтинг: 0 / 0
25.02.2017, 23:39
    #39410266
Dryundel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перезапуск приложения.
Akina... Простейшим вариантом вижу цепное выполнение команд:
Код: vbnet
1.
Shell "taskkill.exe /f /im app.exe && C:\Program\app.exe C:\1.cmx", vbNormalNoFocus



Не сработало. На секунду вспыхивает командная строка и все, тишина. :(
...
Рейтинг: 0 / 0
26.02.2017, 00:12
    #39410275
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перезапуск приложения.
Ну добавьте CMD /c. А ещё лучше CMD /k - чтобы увидеть, что происходит...
...
Рейтинг: 0 / 0
26.02.2017, 00:23
    #39410278
Dryundel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перезапуск приложения.
AkinaНу добавьте CMD /c. А ещё лучше CMD /k - чтобы увидеть, что происходит...

Извиняюсь за бестактный вопрос. Куда добавить?
CorelDRAW VBA такого не понимает. (вроде)
...
Рейтинг: 0 / 0
26.02.2017, 18:47
    #39410432
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перезапуск приложения.
DryundelCorelDRAW VBAТа-а-ак... Правила раздела поди не читал, да? пункт первый...

Чего мы ещё не знаем?

DryundelКуда добавить?
В строку запуска, ясен пень. Один оператор-то, вроде как мест, куда добавлять, явно меньше, чем три, а два варианта можно было и, не спрашивая, попробовать...
...
Рейтинг: 0 / 0
27.02.2017, 02:22
    #39410541
Dryundel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перезапуск приложения.
AkinaТа-а-ак... Правила раздела поди не читал, да? пункт первый...
Да, не досмотрел. Извиняюсь. Больше не буду.
Если данный вопрос нарушает правила не очень сильно, пожалуйста помогите.

AkinaВ строку запуска, ясен пень. Один оператор-то, вроде как мест, куда добавлять, явно меньше, чем три, а два варианта можно было и, не спрашивая, попробовать...
Попробовал. Вот что пишет:



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

Код: vbnet
1.
Shell "CMD /k taskkill.exe /f /im app.exe && C:\Program Files (x86)\SAi\SAi Production Suite\Program\app.exe C:\Wrem\1.cmx", vbNormalNoFocus


Но как теперь это исправить? Дополнительные кавычки не катят (ошибку выдает) скобки тоже не принимает.
...
Рейтинг: 0 / 0
27.02.2017, 07:54
    #39410575
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перезапуск приложения.
DryundelДополнительные кавычки не катят
Чтобы в строковый литерал вставить двойную кавычку, её надо удвоить.
Код: vbnet
1.
Shell "CMD /k taskkill.exe /f /im app.exe && ""C:\Program Files (x86)\SAi\SAi Production Suite\Program\app.exe"" C:\Wrem\1.cmx", vbNormalNoFocus
...
Рейтинг: 0 / 0
27.02.2017, 11:18
    #39410706
Dryundel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перезапуск приложения.
Вау! Заработало!
Спасибо большое.
...
Рейтинг: 0 / 0
27.02.2017, 12:26
    #39410816
Dryundel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перезапуск приложения.
DryundelВау! Заработало!
Спасибо большое.
Рано радовался. Без CMD работать отказывается а с CMD /c командная строка сама не закрывается, а висит пока не закроешь запущенное приложение.
...
Рейтинг: 0 / 0
27.02.2017, 13:31
    #39410886
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перезапуск приложения.
Замени вторую команду, добавь start. Тогда app.exe запустится в новом потоке, а окно консоли закроется.
...
Рейтинг: 0 / 0
06.03.2017, 21:30
    #39415045
Dryundel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перезапуск приложения.
AkinaЗамени вторую команду, добавь start. Тогда app.exe запустится в новом потоке, а окно консоли закроется.

Не работает с командой start.
Запуск приложения, тот, что в двойных кавычках игнорируется. Исполняется только следующая часть команды (C:\Wrem\1.cmx), а она открывает указанный файл в родном (ассоциированном приложении), чего совсем не требуется.

Сейчас строка выглядит так:
Код: vbnet
1.
Shell "CMD /с taskkill.exe /f /im app.exe & start ""C:\Program Files (x86)\SAi\SAi Production Suite\Program\app.exe"" C:\Wrem\1.cmx", vbNormalNoFocus



Как бы ее поправить что бы файл 1.cmx открывался в приложении app.exe
...
Рейтинг: 0 / 0
06.03.2017, 21:34
    #39415048
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перезапуск приложения.
Может, надо всё-таки попросить справку по команде start? и подумать - в качестве какого параметра воспринимается имя исполняемого файла, обрамлённое кавычками...
...
Рейтинг: 0 / 0
06.03.2017, 22:57
    #39415082
Dryundel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перезапуск приложения.
AkinaМожет, надо всё-таки попросить справку по команде start? и подумать - в качестве какого параметра воспринимается имя исполняемого файла, обрамлённое кавычками...
Да, спасибо что ткнули носом. :) Разобрался

Сделал так:
Код: vbnet
1.
Shell "cmd /c taskkill.exe /f /im app.exe & start """" ""C:\Program Files (x86)\SAi\SAi Production Suite\Program\app.exe"" C:\Wrem\1.cmx", vbNormalFocus


Все вроде как бы заработало, но снова проблема .
Вероятно, т.к. app.exe открывается в новом потоке, то запуск не дожидается закрытия ранее открытого. Дело в том, что хасп подхватывает только один экземпляр приложения, поэтому дубль открывается в режиме демо.
Именно по этой причине мне и требовалось сначала закрыть открытое приложение, а только потом запустить заново.
Без start-а все было ок, не устраивала повисшая командная строка.
...
Рейтинг: 0 / 0
07.03.2017, 07:54
    #39415154
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перезапуск приложения.
Это происходит в VB/VBA? Тогда оставьте две команды, а между ними вставьте код получения информации о запущенном приложении в цикле. Условие завершения цикла - приложение не найдено в списке исполняемых.
...
Рейтинг: 0 / 0
07.03.2017, 09:40
    #39415198
Dryundel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перезапуск приложения.
AkinaЭто происходит в VB/VBA? Тогда оставьте две команды, а между ними вставьте код получения информации о запущенном приложении в цикле. Условие завершения цикла - приложение не найдено в списке исполняемых.
А можно это как то по проще. Поясните пожалуйста.
Я не волшебник, а только учусь.
Да, это VBA.
Как хоть примерно выглядит такой код?
...
Рейтинг: 0 / 0
07.03.2017, 09:57
    #39415211
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перезапуск приложения.
Давайте не будем спешить.
Сначала немного расскажите про это самое app.exe. Почему его надо выгружать именно taskkill-ом, да ещё форсить? оно что, не умеет само закрываться? да, оно на самом деле app.exe? а то тут что-то было говорено про Hasp... если речь идёт о штатном сервере ключа, то он прекрасно умеет выгружаться и даже емнип перестартовывать самостоятельно.
...
Рейтинг: 0 / 0
07.03.2017, 13:13
    #39415424
Dryundel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перезапуск приложения.
AkinaДавайте не будем спешить.
Сначала немного расскажите про это самое app.exe. Почему его надо выгружать именно taskkill-ом, да ещё форсить? оно что, не умеет само закрываться? да, оно на самом деле app.exe? а то тут что-то было говорено про Hasp... если речь идёт о штатном сервере ключа, то он прекрасно умеет выгружаться и даже емнип перестартовывать самостоятельно.
Да, оно на самом деле app.exe и закрываться само оно тоже умеет. Но суть в том, что приложение запускаемое app.exe это не весь процесс. В нем запускаются дочерние приложения типа app2.exe в котором еще свои подпроцессы, и если закрыть app.exe нормальным способом, то и все дочерние процессы тоже захлопнутся, а на очередной запуск требуется время. Программа серьезная. Выгружая taskkill-ом мы не трогаем дочерние процессы, которые легко подхватываются вновь запущеным app.exe.
Под Hasp-ом я имею в виду эмулятор ключа который всегда висит в процессах, он не выгружается и не перезапускается, но может подхватывать только один запускаемый app.exe и один app2.exe. Как оно работает я очень слабо представляю, если не сказать большего.
Общая суть макроса в том, чтобы взять объект из одного приложения (в моем случае это CorelDRAW) сохранить его в промежуточном формате *.cmx , а потом открыть этот файл другим приложением app.exe (в моем случае это FlexiSIGN)
Лучше если app.exe уже был запущен и при выгрузке его taskkill-ом новый запуск вместе с открытием файла занимает секунды. Наверное потому, что какие то субпроцессы еще висят. (это мои домыслы).
Но существует вариант когда app.exe еще не запускался, поэтому в "цепочке" я использую "&" вместо "&&"

В последнем варианте:
Код: vbnet
1.
Shell "cmd /c taskkill.exe /f /im app.exe & start """" ""C:\Program Files (x86)\SAi\SAi Production Suite\Program\app.exe"" C:\Wrem\1.cmx", vbNormalFocus


Как я уже писал Hasp не подцепляет app.exe видимо потому, что предыдущий дубль еще не успел выгрузится. Пробовал вставить в цепочку TIMEOUT на 3 секуны, тогда вроде все начинает работать, однако вылезает другая неприятность - перестает работать vbNormalFocus. Фокус остается на исходном приложении, а app.exe запускается в свернутом виде (значок на панели задач).
И потом, TIMEOUT 3 секуны вероятно не на всех машинах будет проходить, а заведомо выставлять его 10 секунд тоже как то не комильфо.
...
Рейтинг: 0 / 0
07.03.2017, 13:23
    #39415444
Dryundel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перезапуск приложения.
Идеальным вариантом было бы вообще не выгружать app.exe, а открыть файл в новом окне этого приложения, но как это организовать, я вообще не представляю, да и файл надо экспортировать из исходного приложения (в моем случае CorelDRAW) с каким то переменным именем или исходным, а потом убивать дабы не создавать растущего архива. В противном случае app.exe отказывается открывать одноименный файл, считая что он уже открыт.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Перезапуск приложения. / 19 сообщений из 19, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]