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

Покажи код запуска 1С-ки
...
Рейтинг: 0 / 0
06.10.2009, 09:45
    #36234299
Kruchinin Pahan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск приложения
rbvИзвините забыл сказать запускаю через RUN
http://forum.foxclub.ru
...
Рейтинг: 0 / 0
06.10.2009, 09:49
    #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
06.10.2009, 10:00
    #36234318
Kruchinin Pahan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск приложения
Dima TrbvИзвините забыл сказать запускаю через RUN
RUN как раз ждет завершения запущенного приложения. Если ключ /N указан, то не ждет. HELP

Покажи код запуска 1С-ки
Нее... Там фенька, там ntvdm запускает виндовый процесс 1cv7.exe и завершается.
...
Рейтинг: 0 / 0
06.10.2009, 10:24
    #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
06.10.2009, 11:07
    #36234502
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск приложения
Код: plaintext
	loShell = CREATEOBJECT("Wscript.Shell") && Shell32.dll Windows Script Host 	lnResult = loShell.Run(Команда Запуска др проги , 0 ,.T.)
...
Рейтинг: 0 / 0
06.10.2009, 11:45
    #36234606
rbv
rbv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск приложения
Dima T,Спасибо за совет при запуске блокнота прога ждет как ты и говорил, но при запуске 1с ты тоже наверное прав там в процессах дело), если можно поподробнее на тему как отловить процесс 1С. Спасибо!
...
Рейтинг: 0 / 0
06.10.2009, 13:01
    #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
06.10.2009, 13:03
    #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
06.10.2009, 13:25
    #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
06.10.2009, 14:13
    #36235065
rbv
rbv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск приложения
reware, спасибо за код, но показывает ошибку в строке: lcStart = BINTOC(68, "4RS") + REPLICATE(CHR(0), 64) , там что не в порядке с типом аргумента функции.!!!
...
Рейтинг: 0 / 0
06.10.2009, 14:35
    #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
06.10.2009, 15:15
    #36235294
reware
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск приложения
Вообще, надо было изначально указывать свою версию фокса. По умолчанию предполагается последняя VFP9.
...
Рейтинг: 0 / 0
06.10.2009, 17:17
    #36235684
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск приложения
Тут я исходник класса-обертки над CreateProcess() давал.

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

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


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