Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / повторный запуск приложения / 21 сообщений из 21, страница 1 из 1
09.07.2004, 13:39:11
    #32597265
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
повторный запуск приложения
Надо отслеживать повторный запуск приложения ( Акс97 ):

1. Задача минимум:
Отследить повторный запуск mdb (клиентская часть) на компьютере
- если есть дубль, то запретить открытие (закрыть) и передать фокус уже открытому

2. Задача средняя:
Отследить попытку доступа к mdb на сети (типа данные) доменным пользователем
т.е. проверять, а не прилинкован ли этот пользователь к данным уже (например с другого компика)
Примечание: Естественно, данная задача имеет смысл при решенной первой (так сказать использование в комплексе)

3. Задача максимум:
Почти то же самое, что и 2, только определять не по доменному пользователю, а по "внутреннему" (заведенному в базе)
грубо говоря, по пользователю, который в табле users имее id = ?
(Следует учесть тот факт, что Акс может быть закрыт не корректно)
Примечание: тоже в комплексе с 1

PS: Не жду готовых решений, но буду рад любым идеям :)
...
Рейтинг: 0 / 0
09.07.2004, 13:53:44
    #32597312
kedzo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
повторный запуск приложения
хм...

а если сделать таблицу,
user
computer
working

при открытии базы туда заносить данные, при выходе - убирать (ну или 0 и 1 ставить в working)

при подключении проверять, закрывать или разрешать...
вот только как переключить фокус.. надо наверное в направлении API копать

хм...
при подключении можно еще в эту таблицу сбрасывать hwnd окна...


а вот с некорректным закрытием...
пока идей нет
...
Рейтинг: 0 / 0
09.07.2004, 13:58:40
    #32597332
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
повторный запуск приложения
kedzoа вот с некорректным закрытием...
пока идей нет
Дать админу возможность редактировать эту таблицу.
...
Рейтинг: 0 / 0
09.07.2004, 14:00:40
    #32597342
Shark
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
повторный запуск приложения
Согласен с предыдущим оратором
Про некорректное закрытие:
Может, пущай невидимая форма(которая так и так нужна, чтоб спрашивать: Вы в натуре хотите выйти? при нажатии на крестик.) по таймеру пишет Now в ту таблицу. И прочитав эту таблицу все будит понятно, наверное.
Можно при желании когда кто и скока работал получить:-)
...
Рейтинг: 0 / 0
09.07.2004, 14:01:45
    #32597348
Shark
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
повторный запуск приложения
>Предыдущим оратором
в смысле с кедзо
...
Рейтинг: 0 / 0
09.07.2004, 14:05:23
    #32597356
Hummer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
повторный запуск приложения
Пишем виндовый сервис, который отслеживает, запушена ли наше приложение, т.е. при запуске приложения передавать сервису идентификатор процесса, сервис опрашивает по таймеру процесс, если не находит, сбрасывает значение свой переменной.
Зато можно отследить всё:) Правда, придётся попариться - но игра стоит свеч:)
...
Рейтинг: 0 / 0
09.07.2004, 14:16:48
    #32597392
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
повторный запуск приложения
Под некорректным закрытием имелось ввиду отключение питания (во всем корпусе)

Саныч, конечно хорошо, но
20 баз в каждой по 20-30 челов - админ не утра__ется все это чистить после включения электричества?

2 Hummer
Для моей задачи (№1) я знаю способ и попроще :)
Например ldb файл просмотреть :)
Но он мне не очень нравиться.
...
Рейтинг: 0 / 0
09.07.2004, 14:22:14
    #32597408
kedzo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
повторный запуск приложения
paparomeНапример ldb файл просмотреть :)
Но он мне не очень нравиться.

у меня были проблемы, когда юзер выходил из базы, а ldb показывал, что он там есть.
...
Рейтинг: 0 / 0
09.07.2004, 14:27:58
    #32597433
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
повторный запуск приложения
kedzo paparomeНапример ldb файл просмотреть :)
Но он мне не очень нравиться.

у меня были проблемы, когда юзер выходил из базы, а ldb показывал, что он там есть.
Бывает такое - потому этот метод мне и не сильно нравиться
Хотя есть предположение, что если даже ldb остался, то при запущеном приложении он уже поправился (т.к. я намерен это проверять на этапе запуска mdb, т.е. она уже запущена) (могу и ошибаться)
...
Рейтинг: 0 / 0
09.07.2004, 14:41:11
    #32597468
kedzo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
повторный запуск приложения
хм...

отключение электричества...

сделать маленькую админскую базу (если у админа не стоит ИБП, и он тоже вырубается вместе со всеми...)
поставить в автозагрузку - при запуске эта база всем юзерам сбрасывает поле working в 0.

и закрывается.

да...
ну или на другой какой комп, который вырубается вместе со всеми.
...
Рейтинг: 0 / 0
09.07.2004, 14:43:31
    #32597475
kedzo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
повторный запуск приложения
или если стоит ИБП, может можно по событию переход на аккумулятор (в проге к этому ИБП) запустить эту базу?...
...
Рейтинг: 0 / 0
09.07.2004, 15:02:32
    #32597533
Bor-L
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
повторный запуск приложения
А я делаю так:
При открытии стартовой формы клиентской части:

'
' Проверка количества одновременно запущенных копий программы
'
Const ДЛИНА_LDB_ДЛЯ_1_РАБОТАЮЩЕЙ_КОПИИ_ПРОГРАММЫ = 64

Dim strPath As String
Dim SIZE As Long

strPath = CodeDb().Name
strPath = Mid(strPath, 1, InStr(1, strPath, ".") - 1) & ".ldb"

On Error GoTo выход ' если в директории НЕТ файла LDB

SIZE = FileLen(strPath) ' Возвращает длину файла (в байтах).

' MsgBox "Длина LDB = " & Size '**** ОТЛАДКА ****

If SIZE > ДЛИНА_LDB_ДЛЯ_1_РАБОТАЮЩЕЙ_КОПИИ_ПРОГРАММЫ Then
' попытка запустить 2 копию !
АВАРИЙНЫЙ_ВЫХОД = True
DoCmd.Quit acQuitSaveNone
End If
выход:
...
Рейтинг: 0 / 0
09.07.2004, 15:03:50
    #32597538
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
повторный запуск приложения
kedzoхм...

отключение электричества...

сделать маленькую админскую базу (если у админа не стоит ИБП, и он тоже вырубается вместе со всеми...)
поставить в автозагрузку - при запуске эта база всем юзерам сбрасывает поле working в 0.

и закрывается.

да...
ну или на другой какой комп, который вырубается вместе со всеми.
Хм.
Вариант конечно :)
Но ведь в жизни так не бывает :(
Допустим = свет глюканул не у всех, а пользователи по офису летают как незнамо кто и отслеживать, кто на какой фазе сидит - не есть руль :(
+ этож не единственный вариант некоректного выключения

А если пользователь ресет даванул?
Он звонит админу - пита пусти меня не путевого?
Тоже конечно выход - пока число пользователей не критично :(

PS: Это все словоблудство однако :)
ЗЫЫ: Принял идеи к размышлению - но можно продолжать обсуждение, ибо задача не есть решена.
...
Рейтинг: 0 / 0
09.07.2004, 15:06:50
    #32597550
Shuhard
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
повторный запуск приложения
автор
2. Задача средняя:
Отследить попытку доступа к mdb на сети (типа данные) доменным пользователем
т.е. проверять, а не прилинкован ли этот пользователь к данным уже (например с другого компика


на сервере Microsoft решается shell > net file
увидишь путь и Login

а по net file id - много чего ищо

для прикола написал и выложил на конфу систему мониторинга открытых mdb файлов

/topic/99452&hl=

можешь модернизировать и соответсвенно интегрировать в код client-mdb

обращение по чтению к "серверной таблице" - каковую формирует процесс на сервере
...
Рейтинг: 0 / 0
09.07.2004, 15:11:45
    #32597572
kedzo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
повторный запуск приложения
paparome kedzoхм...

отключение электричества...

сделать маленькую админскую базу (если у админа не стоит ИБП, и он тоже вырубается вместе со всеми...)
поставить в автозагрузку - при запуске эта база всем юзерам сбрасывает поле working в 0.

и закрывается.

да...
ну или на другой какой комп, который вырубается вместе со всеми.
Хм.
Вариант конечно :)
Но ведь в жизни так не бывает :(
Допустим = свет глюканул не у всех, а пользователи по офису летают как незнамо кто и отслеживать, кто на какой фазе сидит - не есть руль :(
+ этож не единственный вариант некоректного выключения

А если пользователь ресет даванул?
Он звонит админу - пита пусти меня не путевого?
Тоже конечно выход - пока число пользователей не критично :(

PS: Это все словоблудство однако :)
ЗЫЫ: Принял идеи к размышлению - но можно продолжать обсуждение, ибо задача не есть решена.

полностью согласен. это так... размышления... :)
у меня комп на полу раньше стоял (на старой работе), а ресет был в точности на уровне ножки от вертящегося стула :)
и периодически происходила неожиданная перезагрузка :)
...
Рейтинг: 0 / 0
09.07.2004, 15:53:06
    #32597744
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
повторный запуск приложения
2 Shuhard

Спа за идею - буду разбираться :)
...
Рейтинг: 0 / 0
09.07.2004, 16:12:51
    #32597828
АндрейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
повторный запуск приложения
Может я не в тему, но по п.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.
Option Compare Database
Option Explicit

Public Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Public Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" _
    (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long


Function GetAppName(Lnghwnd As Long)
Dim LngResult As Long
Dim StrWinText As String *  255 
Dim LngCCh As Long
LngResult = GetWindowText(Lnghwnd, StrWinText,  255 )
GetAppName = Left(StrWinText, LngResult)
End Function


Function GetCountOfWindows(Lnghwnd, StrAppCaption)
Dim LngResult As Long
Dim LngICount As Long
Dim StrAppName As String

LngResult = GetWindow(Lnghwnd,  0 )  'GW_HWNDFIRST)
 
Do Until LngResult =  0 
If IsWindowVisible(LngResult) Then
StrAppName = GetAppName(LngResult)
StrAppName = RTrim(Left(StrAppName, InStr( 1 , StrAppName, " ")))
If InStr( 1 , StrAppName, StrAppCaption) Then
LngICount = LngICount +  1 
End If
End If
LngResult = GetWindow(LngResult,  2 )  'GW_HWNDNEXT)
 
Loop
GetCountOfWindows = LngICount
End Function

Public Function Instance_Open()
Dim dbs As Database
Set dbs = CurrentDb
Application.GetOption ("Project Name")
If GetCountOfWindows(hWndAccessApp, Application.GetOption("Project Name")) >  0  Then
MsgBox "Эта программа уже открыта на вашем компьютере !!!"
Application.Quit acQuitSaveNone
End If
End Function
вход: функция Instance_Open (через макрос AutoExec)
...
Рейтинг: 0 / 0
09.07.2004, 16:43:56
    #32597904
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
повторный запуск приложения
2 АндрейК
Спа - посмотрю
Это уже интерестнее :)
...
Рейтинг: 0 / 0
09.07.2004, 23:55:49
    #32598358
lobodava
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
повторный запуск приложения
paparome Следует учесть тот факт, что Акс может быть закрыт не корректно
в таблицу с полями:
UserID, StartUpTime, LastUpdateTime, LogoffTime
прописывается время запуска и выхода, а также раз в минуту или в пол минуты по таймеру проставляется текущее время в поле LastUpdateTime.
И тогда с точностью до интервала таймера можем сказать кто в базе, кто вышел корректно и кто аварийно.
...
Рейтинг: 0 / 0
10.07.2004, 01:02:15
    #32598382
Visitor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
повторный запуск приложения
http://www.hiprog.com/forum/forum.asp?action=show&id=2&messid=47528&fullview=0
...
Рейтинг: 0 / 0
12.07.2004, 08:53:26
    #32598998
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
повторный запуск приложения
Всем Спа за участие :)

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


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