Автор | Сообщение |
|
| |
Пост N: 10
Зарегистрирован: 19.10.05
|
|
Отправлено: 25.06.09 16:03. Заголовок: Определить , что программа уже выполняется
Как в Clipper определить, что программа уже выполняется ? (DOS)
|
|
|
Новых ответов нет
[см. все]
|
|
|
| |
Пост N: 42
Зарегистрирован: 17.10.05
|
|
Отправлено: 25.06.09 16:20. Заголовок: DOS - однопользовате..
DOS - однопользовательская среда. запустить 2 экземпляра программы в реальном ДОС - мало реально) если речь идет о том, чтобы узнать что программа уже запущена в другом ДОС-окне, то первое что приходит на ум - это сетевая блокировка какого-нибудь файла или таблицы. Блокировать этот ресурс в начале работы и освобождать в конце. Второй запуск не сможет заблокировать этот же ресурс. Ну, и далее вариации на ту же тему - т.е. нужно разруливать ситуацию в рамках одного рабочего места, или во всей сети... -Успехов!
|
|
|
|
| |
Пост N: 11
Зарегистрирован: 19.10.05
|
|
Отправлено: 25.06.09 23:03. Заголовок: Sorry, запущено неск..
Sorry, запущено несколько копий одной и той же программы в DOS-окнах Windows XP ? Вариант с файлами не есть ответ на вопрос. ( К примеру, программы могут быть различные и обращаться к одному и тому же файлу).
|
|
|
|
| |
Пост N: 1267
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.06.09 07:37. Заголовок: Avf пишет: К пример..
Avf пишет: цитата: | К примеру, программы могут быть различные и обращаться к одному и тому же файлу |
| Если это Ваши программы то ответ уже озвучил LYSK
|
|
|
|
| |
Пост N: 43
Зарегистрирован: 17.10.05
|
|
Отправлено: 26.06.09 07:37. Заголовок: тогда надо точнее фо..
тогда надо точнее формулировать задачу!) а именно, что нужно определять запущен ли еще "свой" экземпляр, или какой-то другой программы. Средствами Windows - можно. Не выходя за рамки ДОС - вряд ли.
|
|
|
|
| постоянный участник
|
Пост N: 880
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.06.09 19:49. Заголовок: Примерно также и я д..
Примерно также и я делал раньше. Допустим запускаю программу MyProga.exe В начале программы ставишь функцию опроса EXENAME() Ставишь ОБРАБОТЧИК ошибок.... Создаешь в этом же каталоге базу с одним полем EXENAME() + ".dbf" и открываешь эту базу в МОНОПОЛЬНОМ режиме. Если базу открыть нельзя, то уже ПЕРВАЯ копия программы запущена !!! Вывешиваешь сообщение, что MyProga.exe уже запущена !!! Только иногда даже в ХР бывают (редко) глюки, когда прога вылетает, файл не разблокируется (Windows не скидывает блокировку), тогда приходиться перезагружать компьютер. У меня юзеры привыкли..
|
|
|
|
| |
Пост N: 19
Зарегистрирован: 09.07.08
|
|
Отправлено: 20.08.09 10:29. Заголовок: Так и быть, дарю: П..
Так и быть, дарю: При входе If (nStartFLG:=ExclOpenFile(-1,'C:\'+PosRepl(Token(ExeName(),'\:'),'.flg'),.t.,,.F.))==-1 Quit EndIf При выходе ExclOpenFile(nStartFLG,'C:\'+PosRepl(Token(ExeName(),'\:'),'.flg')) //=========================================================================== Func ExclOpenFile(pHandl,pFile,pMsg,pCreat,lShared) Local Ret:=-1, ShMode pMsg := if(pMsg ==Nil,.f.,pMsg) pCreat := if(pCreat ==Nil,.t.,pCreat) lShared := if(lShared==Nil,.f.,lShared) ShMode:=if(lShared,64,16) If pHandl == -1 If File(pFile) Ret := FOpen(pFile,2+ShMode) //RW - Exclusive Else If pCreat.AND.(Ret:=FCreate(pFile,0))!=-1 FClose(Ret) Ret:=FOpen(pFile,2+ShMode) EndIf EndIf If pMsg If Ferror()=5 BotWarnMess('Вы уже работаете с этой программой. Повторный запуск невозможен',.t.,3) ElseIf Ferror()=2 .or. Ferror()=3 BotWarnMess('Неуспешная регистрация входа в программу. FError='+AllTrim(Str(FError())),.t.,3) EndIf EndIf Else FClose(pHandl) EndIf Return Ret
|
|
|
|