:: Visual Foxpro, Foxpro for DOS
Ожидание завершения ShellExecute
Vedmak

Сообщений: 5798
Откуда: CiTY
Дата регистрации: 30.10.2003
Есть самописная функция разархивации CAB-файла

FUNCTION activepos_file_uncab
LPARAMETERS lcCabFile, lcReceiptFile
LOCAL lnFile, lcCmd
lcCmd = "$download.cmd"
lcReceiptFile = goApp.user_temp + "\" + ActiveposDataFile
lnFile = FCREATE( lcCmd )
FPUTS( lnFile , 'if exist "' + lcReceiptFile + '" del "' + lcReceiptFile + '"' )
FPUTS( lnFile , 'extrac32 /Y /E /L "' + goApp.user_temp + '" "' + lcCabFile+ '" "'+ActiveposDataFile+'"')
FPUTS( lnFile , 'del "'+lcCmd+'"' )
FCLOSE( lnFile )
ShellExecute(0, "Open", FULLPATH(lcCmd), "", "", 0)
pause( goSet.get( set_pos_uncab_timeout ) )
IF !FILE( lcReceiptFile )
goApp.error_id = err_pos_uncab
ENDIF
RETURN goApp.error_id = no_error
ENDFUNC

Как я понял после запуске батника через ShellExecute фокс продолжает работу. Я натыкался на ситуацию что разархивация не успевает завершится. Особенно если я обращаюсь к удаленному архиву. Я воткнул паузу ожидания с подобранным опытным путем таймаутом. Это, я уверен, "не кашерно". Как можно реализовать ожидание завершения батника на уровне ShellExecute или есть иная функция из виндовой API которая ждет завершение запускаемого приложения и, возможно, возвращает результат?

Win10 x64
VFP9 SP2


------------------
Говорить стоит лишь для тех, кто слушает.
Ratings: 0 negative/0 positive
Re: Ожидание завершения ShellExecute
AndyNigmatec
Автор

Сообщений: 1407
Откуда: Волгоград
Дата регистрации: 28.06.2015
пользуюсь этим - process.vcx, тут можно ждать

параметр .StandAlone=.T. - запущенное самостоятельно работает, .F. - фокс будет ждать

пример (выдрал из рабочего и чуть поскипал неважное):
IF FILE(lcFileImport)
cExecuteString=["]+cFile7za+[" e -y "]+lcFileImport+[" -o"]+lcDirSave+["]
oProcess=CREATEOBJECT('process')
WITH oProcess
.CommandLine=cExecuteString
.StartDir=JUSTPATH(cFile7za)
.TimeOut=180000 && 180 сек
.Show=0
.StandAlone=.F.
.Interval=100
.Run()
ENDWITH
RELEASE oProcess
ELSE
lcOk=0
ENDIF

P/S можно в принципе не пользовать все - а тупо глянуть на каких api там реализовано ...



Исправлено 2 раз(а). Последнее : AndyNigmatec, 30.06.22 20:02
Ratings: 0 negative/0 positive
Re: Ожидание завершения ShellExecute
Vedmak

Сообщений: 5798
Откуда: CiTY
Дата регистрации: 30.10.2003
AndyNigmatec
...
P/S можно в принципе не пользовать все - а тупо глянуть на каких api там реализовано ...

Да, спасибо за направление! Переработаю под свой стиль.


------------------
Говорить стоит лишь для тех, кто слушает.
Ratings: 0 negative/0 positive
Re: Ожидание завершения ShellExecute
1793

Сообщений: 290
Откуда: Озерск
Дата регистрации: 17.10.2001
Можно есчё глянуть
oShell = Createobject("Wscript.Shell")
oShell.Run(lcTasks,1,1)
Ratings: 0 negative/0 positive
Re: Ожидание завершения ShellExecute
Vedmak

Сообщений: 5798
Откуда: CiTY
Дата регистрации: 30.10.2003
1793
Можно есчё глянуть
oShell = Createobject("Wscript.Shell")
oShell.Run(lcTasks,1,1)

Спасибо. Это тоже посмотрел.

C методом RUN возникли вопросы, но метод Exec подошел. А как скрыть окно процесса? Поясню. Внешняя кассовая система валит чеки в виде CAB-файлов в папку. Моя утилита "сканит" эту папку и выбирает данные из новых файлов. Процесс разархивации CAB-файла консольной коммандой рождает окна. Как скрыть всплывающее окно процесса ? Моргает активно... )


Цитата:
FUNCTION shell_execute
LPARAMETERS lcCmd, lnWait
LOCAL loShell, loExec
loShell = Createobject("Wscript.Shell")
loExec = loShell.exec( lcCmd )

IF EMPTY( lnWait )
return
ENDIF

DO WHILE loExec.Status = ShellExecInprogress
pause( 1 )
ENDDO
ENDFUNC


------------------
Говорить стоит лишь для тех, кто слушает.




Исправлено 1 раз(а). Последнее : Vedmak, 01.07.22 23:26
Ratings: 0 negative/0 positive
Re: Ожидание завершения ShellExecute
AndyNigmatec
Автор

Сообщений: 1407
Откуда: Волгоград
Дата регистрации: 28.06.2015
в случае использования process.vsx - ставим .Show=0 - и ничего не мелькат - все в фоне
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 15 (Гостей: 15)

© 2000-2023 Fox Club 
Яндекс.Метрика