Форум » [x]Harbour » Запуск внешнего приложения » Ответить

Запуск внешнего приложения

Dima:

Ответов - 26, стр: 1 2 All

Dima: Переделал еще одному клиенту прогу с Clipper на Harbour И вот что странно при запуске по сетке этого приложения не работает печать ряда документов. Печать идет через запуск внешнего приложения с указанием параметров. На всех компах в сети стоит NOD32. На сервере стоит антвирь от мелких и печать там работает нормально. Может ли NOD32 счесть что запуск из приложения другого приложения является подозрительным действием и блокировать такой код ? В аналогичной проге + установленный DRWEB проблем нет. PS Внешнее приложение есть и лежит на месте. Код примерно таков EXECANDWAIT(Gl_wnprn+"winprint "+cpars,0) Думал временный файл отчета не создается , ан нет он есть.

PSP: Dima пишет: Может ли NOD32 счесть что запуск из приложения другого приложения является подозрительным действием и блокировать такой код ? Точно не скажу, но есть вариант, что Нод запускает эту программу в "песочнице", чтобы исключить вредоносное влияние. А в "песочнице", понятное дело, все сетевые функции блокированы. Не пробовал Ноду в исключения эту прогу добавить?

Dima: PSP пишет: Не пробовал Ноду в исключения эту прогу добавить? Да думал сделать но сейчас рабочий процесс и доступа удаленного к компу мне не дают.


Dima: Отрубил NOD32 и ни чего не изменилось. Хммм не пойму куда копать.

PSP: А приложение запускается?

Dima: PSP пишет: А приложение запускается? Да. Понатыкал проверок (с выводом на экран) до EXECANDWAIT(Gl_wnprn+"winprint "+cpars,0) Все красиво и нормально но печать не пашет ;) Думал глючит EXECANDWAIT , заменил на hb_processrun и ни чего не изменилось. Локально работает а по сети нет. PS Заменил на WAPI_ShellExecute заработала печать , не фига не понимаю ......... Что такое может быть с операционкой что работает только такой вызов ? WAPI_ShellExecute(,"open",Gl_wnprn+"winprint",ccpars,,0) А если так то не работает (у меня работает норм у клиента нет) EXECANDWAIT(Gl_wnprn+"winprint "+ccpars,0) или hb_processrun(Gl_wnprn+"winprint "+ccpars)

Sergy: Dima пишет: hb_processrun У меня в соседней ветке пока все сходится к тому, что именно hb_ProcessRun(), который я поставил вместо RUN() на 95% явился причиной "необъяснимых" вылетов программы без единого сообщения. Причем в режиме отладки запускал в цикле - все работает. А на рабочих местах - из 10 компов 6 штук вылетают в среднем раз в час-полтора.

Dima: Sergy пишет: явился причиной "необъяснимых" вылетов программы без единого сообщения Полагаю что не только он является причиной. У меня тоже бывает на ровном месте (правда редко очень) хлоп и окошко проги исчезло без сообщений и без лога , при этом даже не использовался hb_ProcessRun. При чем локально такого не происходит а вот по сети да.

Dima: Сделал простой тест [pre2] Proc main local sysname REQUEST HB_LANG_RU866 HB_LANGSELECT("RU866") REQUEST HB_CODEPAGE_RU866 hb_cdpSelect( "RU866" ) sysname:=getenv("TEMP")+"\"+alltrim(str(hb_MilliSeconds()))+".txt" set alter on set alter to (sysname) ? "Проверка печати через EXECANDWAIT" set alter off close alter EXECANDWAIT("c:\winprint\winprint "+sysname,0) sysname:=getenv("TEMP")+"\"+alltrim(str(hb_MilliSeconds()))+".txt" set alter on set alter to (sysname) ? "Проверка печати через hb_processrun" set alter off close alter hb_processrun("c:\winprint\winprint "+sysname,,,,.t.) sysname:=getenv("TEMP")+"\"+alltrim(str(hb_MilliSeconds()))+".txt" set alter on set alter to (sysname) ? "Проверка печати через WAPI_ShellExecute" set alter off close alter WAPI_ShellExecute(,"open","c:\winprint\winprint",sysname,,0) return [/pre2] У меня вылезло 3 страницы. Тоже и у другого клиента. У проблемного вылезла только одна с лейбой "Проверка печати через WAPI_ShellExecute" Куда копать не пойму.........

petr707: 1) Гарантированно сделать разные имена файлов печати sysname1..2..3, не полагаясь на hb_MilliSeconds 2) Прочитать сообщение out.txt от "c:\winprint\winprint ..."+">out.txt" 3) Простой run() или hb_run() - иногда лучше работает, чем остальное вышеприведенное 4) Хотя бы inkey(3) между тремя заданиями

Dima: petr707 пишет: hb_run() Запускается в отдельном окне что напрягает и не скрыть его..........

petr707: 1) Принтер - локальный, сетевой, удаленный в терминальном сеансе? Марка известна? 2) Порт принтера ? Winprint - не все порты сможет осилить 3) Свойства принтера - доступны ?

Dima: Локальный PDFFACTORY (виртуальный принтер)

Dima: Смысл в том что нужно запустить пачку документов на печать с помощью winprint.exe С этой задачей успешно справлялся до поры до времени EXECANDWAIT так как он ждал окончания задания. Но почему то у одного клиента он работать отказался. Запуск той же пачки документов через WAPI_ShellExecute не вариант так как он не ждет окончания задания и в результате страницы вылазят в перемешку а не по порядку.

petr707: Уточнение - у каждого клиента свой экземпляр "c:\winprint\winprint " ? и свой экземпляр локального виртуального принтера ? И каждый клиент себе сам изготавливает PDF-файлы ? Реального изготовления бумажных твердых копий - нет ? Не проще сразу в софте сделать PDF-файл?

Dima: petr707 пишет: Уточнение - у каждого клиента свой экземпляр "c:\winprint\winprint " ? Да petr707 пишет: и свой экземпляр локального виртуального принтера ? Да petr707 пишет: И каждый клиент себе сам изготавливает PDF-файлы ? Да petr707 пишет: Реального изготовления бумажных твердых копий - нет ? Есть На этот принтер пускаем задания только когда нужно что то затестить.

petr707: 1)Если сетевая конфиграция - то сделал бы единый winprint.exe - в сети для всех 2)Проверил бы печать winprint.exe проблемного клиента на другой виртуальный(или реальный) принтер, например XPS 3)все-таки интересно, что сообщает winprint в >out.txt ?

Dima: petr707 пишет: 3)все-таки интересно, что сообщает winprint в >out.txt Все это я делаю удаленно. Попробовать с выводом можно но такое впечатление что EXECANDWAIT вообще ни чего не запускает. В аналогичной сети с гораздо большим кол-вом компов EXECANDWAIT без проблем запускает winprint

petr707: Понятно, что запуск разный... если точно известно- что Shell - работает Чтобы получить результат , нужно или вызов поменять, или причину понять. Проще писать в лог.txt (изнутри execandwait или обертки вокруг нее): состав командной строки, ее ответ и errolevel Потом в другое время посмотреть лог.Может один вызов - не пропускается антивирусом(к примеру), а второй вызов - пропускается. Первый вызов - ищет cmd.exe(а он стал недоступен), а второму вызову - не нужен cmd.exe В одном вызове - запущенная программа - может ждать ответа оператора - на какую-нить ошибку вызова ( не дождется, поскольку окна-то нет )

Dima: сделал с логами предварительно проверив переменную TEMP там она вот такая C:\DOCUME~1\Admin\LOCALS~1\Temp Логи делал так (у меня работает) str1:="" hb_processrun("c:\winprint\winprint",,@str1) memowrit("c:\winprint\log1.txt",str1) Hb_run("notepad c:\winprint\log1.txt") EXECANDWAIT("c:\winprint\winprint >c:\winprint\log.txt") Hb_run("notepad c:\winprint\log.txt") В обоих случаях логов нет , кроме первого который сам создаю но в нем пусто. То есть как я и полагал запуск winprint не происходит с помощью этих 2-х функций и хз почему. PS Лог должен быть таким [pre2] Shareware version 2.08.02 (22.08.2000) Copyright Port Ltd, 1999 Internet: www.port.obninsk.ru E-Mail: winprint@mail.ru port@obninsk.ru Phone: (08439) 60851, (08439) 63087 Usage: Winprint.exe <fileName> [port] For Example: Winprint.exe d:\file.txt Winprint.exe d:\file.txt lpt1 Winprint.exe d:\file.txt \\Server\hp [/pre2]



полная версия страницы