powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрет запуска нескольких копий mde
8 сообщений из 8, страница 1 из 1
Запрет запуска нескольких копий mde
    #39358348
VeraK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Возможно, плохо ищу, но никак не могу понять - возможно сделать, чтобы при открытии mde не запускались новые копии приложения, а открывалось уже открытое?
...
Рейтинг: 0 / 0
Запрет запуска нескольких копий mde
    #39358355
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Запрет запуска нескольких копий mde
    #39360898
VeraK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!!
После дополнительного гугления, на XP заработал такой скрипт vbs:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Dim objService, objProcess, WshShell

Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2")
Set objProcess = objService.ExecQuery("SELECT * FROM Win32_Process WHERE NAME = 'MSACCESS.EXE'")
Set WshShell = CreateObject("Wscript.Shell")

If objProcess.Count = 0 Then
	WshShell.Run "MSACCESS.EXE ""D:\database\file.mde""", 3
Else
	WshShell.appactivate "windowname"
End If

Set objService = Nothing
Set objProcess = Nothing
Set WshShell = Nothing
...
Рейтинг: 0 / 0
Запрет запуска нескольких копий mde
    #39361074
Odess
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Некрасивое решение.
А если будет второе приложение, которое должно работать на этом компьютере?
Будет ли оно работать на сервере с несколькими пользователями?

Гораздо красивее использовать такой метод:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Application.CurrentProject.Properties.Add "AppTitle", "ИмяПриложения"
Application.RefreshTitleBar


CurrWnd = GetWindow(Access.Application.hWndAccessApp, GW_HWNDFIRST)
Do While CurrWnd <> 0
  Length = GetWindowTextLength(CurrWnd)
  ListItem = Space(Length + 1)
  Length = GetWindowText(CurrWnd, ListItem, Length + 1)
  If Length > 0 Then
    If ListItem = "ИмяПриложения" Then 
      par = par + 1
      If par > 1 Then
        MsgBox ("Приложение уже запущено!")
        DoCmd.Quit
      End If
    End If
  End If
  CurrWnd = GetWindow(CurrWnd, GW_HWNDNEXT)
  DoEvents
Loop
...
Рейтинг: 0 / 0
Запрет запуска нескольких копий mde
    #39361088
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OdessНекрасивое решение.
...
Гораздо красивее использовать такой метод:
На вкус и цвет все фломастеры разные.
©

ИМХО, я бы не сказал, что это решение красивее - оно другое.
...
Рейтинг: 0 / 0
Запрет запуска нескольких копий mde
    #39361091
Odess
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мое (в переносном смысле) решение более практичное. А не в плане более "красивого" кода.
Не думаю, что запрет запуска MSACCESS в количестве 1 экземпляра на компьютере есть правильным.
Вере самой решать - какое применять.
...
Рейтинг: 0 / 0
Запрет запуска нескольких копий mde
    #39361385
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Odess, ТС подобрал подходящее ему решение, а запрет вообще второго процесса Access это частное решение, по ссылке запрет запуска именно конкретного файла.
...
Рейтинг: 0 / 0
Запрет запуска нескольких копий mde
    #39361449
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а я тут скрестил ссылку с батом и получился ещё вариант (bat файла), который мне нравится (главное чтоб взлетело):
- ловит не акцесс, а файл как по ссылке Панурга
- должен запускаться не только на ХР, а и на W10 (64)
- полный путь к акесу позволяет запустить в нужной версии офиса (тут заточено на 2003) в режиме рантайма, или прямо в самом рантайме и пофиг, что стоит еще и офис 2007, 2010 или 2013 или вообще все вместе...
Слабое место "namepril" - это имя приложения в диспетчере (первая вкладка), например под ХР если свернуто, то не разворачивается (нужно руками доставать), а если не свернуто, а закрыто другими окнами - то вперед выскакивает... но и так хорошо...
Код: vbnet
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.
Dim fs, sysdrv, MyFold, MyPril
Dim objService, objProcess, WshShell
Dim StrRun
MyFold="C:\folder\"            'путь к программе
MyPril="proga.mde"            'программа
'ищем не запущено ли уже...
Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2")
Set objProcess = objService.ExecQuery("SELECT * FROM Win32_Process WHERE NAME = 'MSACCESS.EXE' AND CommandLine like '%" & MyPril & "%'")
Set WshShell = CreateObject("WScript.Shell")
If objProcess.Count = 0 Then
On Error Resume Next
'--- Попытка запустить на 32 разрядной ОС.
        StrRun = """"& sysdrv & "\Program Files\Microsoft Office\OFFICE11\MSACCESS.EXE"" /runtime """ & MyFold & MyPril & ""
	WshShell.Run(StrRun)
'--- Попытка запустить на 64 разрядной ОС.
        StrRun = """"& sysdrv & "\Program Files (x86)\Microsoft Office\OFFICE11\MSACCESS.EXE"" /runtime """ & MyFold & MyPril & ""
        WshShell.Run(StrRun)
Else
MsgBox "Программа  уже запущена на вашем компьютере!"
' имя приложения в диспетчере задач (если было свернуто - может и не развернуться)
	WshShell.Appactivate "namepril"
End If
Set objService = Nothing
Set objProcess = Nothing
Set fs = Nothing
Set WshShell = Nothing
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрет запуска нескольких копий mde
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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