powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Запуск приложения
17 сообщений из 17, страница 1 из 1
Запуск приложения
    #36233891
rbv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rbv
Гость
Всем привет), друзья подскажите, есть проблем ка - я запускаю из проги 1С 7-ку монопольно в конфигураторе с целью про индексировать и закрыть! Проблема в следующим: как заставить прогу на фоксе ждать пока 1с закроется а не проскакивать пока индексируеться 1с? Не судите строго я просто новичок!
...
Рейтинг: 0 / 0
Запуск приложения
    #36233923
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rbvВсем привет), друзья подскажите, есть проблем ка - я запускаю из проги 1С 7-ку монопольно в конфигураторе с целью про индексировать и закрыть! Проблема в следующим: как заставить прогу на фоксе ждать пока 1с закроется а не проскакивать пока индексируеться 1с? Не судите строго я просто новичок!
Каким именно образом запускается 1С из фокса (RUN, ShellExecute...) ?
...
Рейтинг: 0 / 0
Запуск приложения
    #36234250
rbv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rbv
Гость
Извините забыл сказать запускаю через RUN
...
Рейтинг: 0 / 0
Запуск приложения
    #36234294
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rbvИзвините забыл сказать запускаю через RUN
RUN как раз ждет завершения запущенного приложения. Если ключ /N указан, то не ждет. HELP

Покажи код запуска 1С-ки
...
Рейтинг: 0 / 0
Запуск приложения
    #36234299
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rbvИзвините забыл сказать запускаю через RUN
http://forum.foxclub.ru
...
Рейтинг: 0 / 0
Запуск приложения
    #36234305
rbv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rbv
Гость
код запуска:
y='"C:\Program Files\1Cv77\BIN\1CV7S.exe" ENTERPRISE /D"D:\1S_KP\KESK\TES_INTA_EE\" /N"Администратор" /P"1221" /M /@"D:\ftp2\w.txt"'
RUN &y
...
Рейтинг: 0 / 0
Запуск приложения
    #36234318
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TrbvИзвините забыл сказать запускаю через RUN
RUN как раз ждет завершения запущенного приложения. Если ключ /N указан, то не ждет. HELP

Покажи код запуска 1С-ки
Нее... Там фенька, там ntvdm запускает виндовый процесс 1cv7.exe и завершается.
...
Рейтинг: 0 / 0
Запуск приложения
    #36234378
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kruchinin PahanDima TrbvИзвините забыл сказать запускаю через RUN
RUN как раз ждет завершения запущенного приложения. Если ключ /N указан, то не ждет. HELP

Покажи код запуска 1С-ки
Нее... Там фенька, там ntvdm запускает виндовый процесс 1cv7.exe и завершается.
дело в 1cv7.exe
ntvdm не причем. Такой код работает с ожиданием:
Код: plaintext
1.
run notepad.exe
MessageBox(time())
rbv , попробуй эти две строчки у себя запустить и сообщи о результате. У меня фокс ждет пока блокнот закроется.

Похоже 1cv7.exe себя перезапускает (или что-то еще запускает) и первый экземпляр закрывается (которого ntvdm ждет), а второй молотит. 1С-ки нет под рукой, проверить нечем.
Если все так, как я описал, то тут изворачиваться надо по-хитрому. Делать паузу, отлавливать процесс 1cv7.exe и дожидаться его завершения.
...
Рейтинг: 0 / 0
Запуск приложения
    #36234502
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
	loShell = CREATEOBJECT("Wscript.Shell") && Shell32.dll Windows Script Host 	lnResult = loShell.Run(Команда Запуска др проги , 0 ,.T.)
...
Рейтинг: 0 / 0
Запуск приложения
    #36234606
rbv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rbv
Гость
Dima T,Спасибо за совет при запуске блокнота прога ждет как ты и говорил, но при запуске 1с ты тоже наверное прав там в процессах дело), если можно поподробнее на тему как отловить процесс 1С. Спасибо!
...
Рейтинг: 0 / 0
Запуск приложения
    #36234829
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rbvDima T,Спасибо за совет при запуске блокнота прога ждет как ты и говорил, но при запуске 1с ты тоже наверное прав там в процессах дело), если можно поподробнее на тему как отловить процесс 1С. Спасибо!

Можно запустить внешнее приложение в отдельном процессе и дожидаться его окончания.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
DECLARE INTEGER CreateProcess IN Win32API ;
		INTEGER lpApplicationName, ;
		STRING lpCommandLine, ;
        INTEGER lpProcessAttributes, ;
        INTEGER lpThreadAttributes, ;
        INTEGER bInheritHandles, ;
        INTEGER dwCreationFlags, ;
        INTEGER lpEnvironment, ;
        INTEGER lpCurrentDirectory, ;
        STRING @lpStartupInfo, ;
        STRING @lpProcessInformation
DECLARE INTEGER WaitForSingleObject IN Win32API ;
        INTEGER hHandle, ;
        INTEGER dwMilliseconds
DECLARE INTEGER CloseHandle IN Win32API ;
        INTEGER hObject


=API_RunAndWait('myprog.exe','',.f.)
return

***************************************************************
FUNCTION API_RunAndWait()
*!*	Запускает внешний процесс (приложение) и ждет конца
*!*	его выполнения.
*!*	Параметры :
*!*	tcCommandLine - командная строка для выполнения.
*!*	                Например - "c:\my\prog.exe file1.txt file2.txt"
*!*	tcCallBackMacro - подпрограмма (необязательна) для выполнения в 
*!*	                  цикле работы запущенного процесса.
*!*	                  Можно оставить пустым.
*!*	tlInvisible - признак видимости окна процесса 
*!*                   (.t. - окна не видно, .f. - видно).
*!*	Возвращает .t., если процесс успешно запущен.
*!*	НЕ возвращает кодов завершения запущенного приложения.
***************************************************************
paramETERS tcCommandLine, tcCallBackMacro, tlInvisible
#DEFINE NORMAL_PRIORITY_CLASS         32 
#DEFINE IDLE_PRIORITY_CLASS           64 
#DEFINE HIGH_PRIORITY_CLASS           128 
#DEFINE REALTIME_PRIORITY_CLASS       1600 
#DEFINE WAIT_TIMEOUT                 0x00000102
#DEFINE WAIT_INTERVAL                 500 
#DEFINE CREATE_NO_WINDOW   134217728 

LOCAL lcStart, lcProcessInfo, lnReturn, lnHProcess, lnCreationFlags
IF VARTYPE(tcCommandLine) # "C" OR EMPTY(tcCommandLine)
	RETURN .f.
ENDIF
IF VARTYPE(tcCallBackMacro) # "C"
    tcCallBackMacro = ""
ENDIF
IF VARTYPE(tlInvisible) # "L"
    tlInvisible = .f.
ENDIF 
tcCallBackMacro = ALLTRIM(tcCallBackMacro)
tcCommandLine = ALLTRIM(tcCommandLine)
IF RIGHT(tcCommandLine,  1 ) # CHR( 0 )
    tcCommandLine = tcCommandLine + CHR( 0 )
ENDIF 
lnCreationFlags = IIF(tlInvisible = .t., CREATE_NO_WINDOW,  0 )  + NORMAL_PRIORITY_CLASS
lcStart = BINTOC( 68 , "4RS") + REPLICATE(CHR( 0 ),  64 )
lcProcessInfo = REPLICATE(CHR( 0 ),  16 )
lnReturnCode = CreateProcess( 0 , tcCommandLine,  0 ,  0 ,  1 , ;
lnCreationFlags,  0 ,  0 , @lcStart, @lcProcessInfo)
&& Если не можем запустить, то выходим немедленно.
IF lnReturnCode =  0 
    RETURN .f.
ENDIF
lnHProcess = CTOBIN(SUBSTR(lcProcessInfo,  1 ,  4 ), "4RS")
DO WHILE .t.
IF WaitForSingleObject(lnHProcess, WAIT_INTERVAL) <> WAIT_TIMEOUT
    EXIT
ELSE
    DOEVENTS
    IF !EMPTY(tcCallBackMacro)
        EXECSCRIPT(tcCallBackMacro)
        DOEVENTS
    ENDIF
ENDIF
ENDDO
lnReturnCode = CloseHandle(lnHProcess)
RETURN .t.
ENDFUNC
...
Рейтинг: 0 / 0
Запуск приложения
    #36234838
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TKruchinin PahanDima TrbvИзвините забыл сказать запускаю через RUN
RUN как раз ждет завершения запущенного приложения. Если ключ /N указан, то не ждет. HELP

Покажи код запуска 1С-ки
Нее... Там фенька, там ntvdm запускает виндовый процесс 1cv7.exe и завершается.
дело в 1cv7.exe
ntvdm не причем. Такой код работает с ожиданием:
Код: plaintext
1.
run notepad.exe
MessageBox(time())
rbv , попробуй эти две строчки у себя запустить и сообщи о результате. У меня фокс ждет пока блокнот закроется.

Похоже 1cv7.exe себя перезапускает (или что-то еще запускает) и первый экземпляр закрывается (которого ntvdm ждет), а второй молотит. 1С-ки нет под рукой, проверить нечем.
Если все так, как я описал, то тут изворачиваться надо по-хитрому. Делать паузу, отлавливать процесс 1cv7.exe и дожидаться его завершения.
Можно проще сделать - запускать батник, который будет работать через
START /WAIT

Помоему, такое ухищрение работало. Но могу и ошибаться - надо проверить.
...
Рейтинг: 0 / 0
Запуск приложения
    #36234920
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rbv... если можно поподробнее на тему как отловить процесс 1С. Спасибо!
На фоксе такое довольно муторно писать. Возможно есть какие-нибудь готовые компоненты для перебора процессов.
У меня есть DLL-ка на Си. Она не совсем то что тебе надо делает. Но можно и ее задействовать.
Код: plaintext
1.
2.
3.
declare integer IsWorkingPath in chkexe.dll STRING
if IsWorkingPath('C:\1\') =  1 
	? 'Что-то запущено'
endif

Функция IsWorkingPath() - возвращает 1 если хоть один из процессов запущен EXE-шником из заданной папки или подпапок.

В твоем случае ее либо править надо, либо сначала проверять что точно ничего не запущено (а то может что-то левое запустили, а она на это сработает и будет висеть ожидание), запускать 1С и ждать завершения периодически проверяя.

В архиве DLL и исходники этой функции.
...
Рейтинг: 0 / 0
Запуск приложения
    #36235065
rbv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rbv
Гость
reware, спасибо за код, но показывает ошибку в строке: lcStart = BINTOC(68, "4RS") + REPLICATE(CHR(0), 64) , там что не в порядке с типом аргумента функции.!!!
...
Рейтинг: 0 / 0
Запуск приложения
    #36235161
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rbvreware, спасибо за код, но показывает ошибку в строке: lcStart = BINTOC(68, "4RS") + REPLICATE(CHR(0), 64) , там что не в порядке с типом аргумента функции.!!!
Похоже, у вас фокс не девятой версии. В более ранних версиях надо писать свою функцию перевода числа в 4-байтное представление. Как-нибудь так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
FUNCTION NumtoDWord(tnNumber)
	LOCAL b0, b1, b2, b3

	*// Вышли за пределы
	IF tnNumber >= 0xFFFFFFFF
		RETURN chr( 0 )+chr( 0 )+chr( 0 )+chr( 0 )
	ENDIF
	
	RETURN	CHR(BITAND(tnNumber, 0xFF)) + ;
			CHR(BITAND(BITRSHIFT(tnNumber, 0x08), 0xFF)) + ;
			CHR(BITAND(BITRSHIFT(tnNumber, 0x10), 0xFF)) + ;
			CHR(BITRSHIFT(tnNumber, 0x18))
ENDFUNC 
...
Рейтинг: 0 / 0
Запуск приложения
    #36235294
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, надо было изначально указывать свою версию фокса. По умолчанию предполагается последняя VFP9.
...
Рейтинг: 0 / 0
Запуск приложения
    #36235684
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут я исходник класса-обертки над CreateProcess() давал.

В простейшем случае использовать так:
Код: plaintext
1.
2.
3.
loWEx = NewObject('waitexec')
if loWEx.Execute('c:\... 1cv7.exe ...') && Запускаем 1C
   loWEx.WaitStop() && Дожидаемся завершения работы
endif

Попробуй, но я почти уверен что результат как у команды RUN будет, т.к. принцип запуска один и тот же.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Запуск приложения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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