powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / повторный запуск приложения
21 сообщений из 21, страница 1 из 1
повторный запуск приложения
    #32597265
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо отслеживать повторный запуск приложения ( Акс97 ):

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

да...
ну или на другой какой комп, который вырубается вместе со всеми.
...
Рейтинг: 0 / 0
повторный запуск приложения
    #32597475
Фотография kedzo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или если стоит ИБП, может можно по событию переход на аккумулятор (в проге к этому ИБП) запустить эту базу?...
...
Рейтинг: 0 / 0
повторный запуск приложения
    #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
повторный запуск приложения
    #32597538
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kedzoхм...

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

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

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

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

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

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


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

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

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

/topic/99452&hl=

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

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

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

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

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

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

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

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

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

Спа за идею - буду разбираться :)
...
Рейтинг: 0 / 0
повторный запуск приложения
    #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
повторный запуск приложения
    #32597904
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 АндрейК
Спа - посмотрю
Это уже интерестнее :)
...
Рейтинг: 0 / 0
повторный запуск приложения
    #32598358
lobodava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
paparome Следует учесть тот факт, что Акс может быть закрыт не корректно
в таблицу с полями:
UserID, StartUpTime, LastUpdateTime, LogoffTime
прописывается время запуска и выхода, а также раз в минуту или в пол минуты по таймеру проставляется текущее время в поле LastUpdateTime.
И тогда с точностью до интервала таймера можем сказать кто в базе, кто вышел корректно и кто аварийно.
...
Рейтинг: 0 / 0
повторный запуск приложения
    #32598382
Фотография Visitor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.hiprog.com/forum/forum.asp?action=show&id=2&messid=47528&fullview=0
...
Рейтинг: 0 / 0
повторный запуск приложения
    #32598998
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем Спа за участие :)

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


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