Страница: 1 | 2 | 3 | 4 |
Вопрос: Запрет на повторный запуск приложения!
Добавлено: 27.02.06 01:40
Автор вопроса: Albert | ICQ: 334-970-670
Как в vb6, если уже запущено одно приложение, запретить повторный запуск этого же приложения??? Что бы десяток не висело. Чтобы просто, при повторном запуске ничего не происходило! Как проверить запущено ли это приложение уже???
Ответы
Всего ответов: 57
Номер ответа: 1
Автор ответа:
mynog
Вопросов: 3
Ответов: 42
Профиль | | #1
Добавлено: 27.02.06 01:53
If App.PrevInstance = True Then End
Номер ответа: 2
Автор ответа:
SerJ
Вопросов: 24
Ответов: 332
Профиль | | #2
Добавлено: 27.02.06 14:56
Если приложение переименовать, то App.PrevInstance не канает.
Номер ответа: 3
Автор ответа:
Albert
ICQ: 334-970-670
Вопросов: 14
Ответов: 20
Профиль | | #3
Добавлено: 27.02.06 16:01
Попробовал, сделал! Вставил этот If в Процедуру Form_Load! Но если писать ...Then End то при повторном запуске приложения, происходит просто выход из процедуры Form_Load!
Я исправил на ...Then Unload Me! Да, при повторном запуске приложения - оно не запускается, только примерно через 2 минуты вылезает MsgBox:
Run-time error '360': Object already loaded
Что это такое??? Может я не парвильно делаю???
Номер ответа: 4
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #4
Добавлено: 27.02.06 16:15
тю...
т.е. прога не запускается, что ещё хочешь?
Номер ответа: 5
Автор ответа:
Albert
ICQ: 334-970-670
Вопросов: 14
Ответов: 20
Профиль | | #5
Добавлено: 27.02.06 17:42
Говорю же она не запускается повторно, но через несколько минут вылезает сообщение об ошибке! И дальше первая прога закрывается! Что делать?
Номер ответа: 6
Автор ответа:
Tamplier
ICQ: 298742928
Вопросов: 58
Ответов: 340
Профиль | | #6
Добавлено: 27.02.06 18:17
Делай то же самое на Form_Activate. Тока она мелькать будет.
Номер ответа: 7
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #7
Добавлено: 27.02.06 21:34
Тогда стоит создать какой-нить именоваеый глобальный объект Например ФайлМаппинг...
Номер ответа: 8
Автор ответа:
Mihalыch
ICQ: 373-509-101
Вопросов: 56
Ответов: 330
Профиль | | #8
Добавлено: 28.02.06 05:47
Если приложение имеет интерфейс т.е. окна, тогда можно по “босятски”.
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Sub Form_Load()
Dim hWnd As Long
hWnd = FindWindow(vbNullString, Me.Caption & " "
If hWnd = 0 Then
Me.Caption = Me.Caption & " "
Else
MsgBox "Уже работаем!", vbInformation, "Внимание!"
End
End If
'количество добавляемых пробелов наверное лучше увеличить,
'чтобы снизить вероятность совпадения с именем окна другого приложения
End Sub
Номер ответа: 9
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #9
Добавлено: 28.02.06 11:59
Тогда уж проще получить список запущенных процессов. Если такой уже имеется - выгружаемся нафиг.
Номер ответа: 10
Автор ответа:
ANDREY
Вопросов: 0
Ответов: 33
Профиль | | #10
Добавлено: 28.02.06 12:07
Номер ответа: 11
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #11
Добавлено: 28.02.06 12:26
Хм... А чего там сложного то?
Номер ответа: 12
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #12
Добавлено: 28.02.06 13:16
Правильно! Юзай световоры ( CreateMutex() )!
Номер ответа: 13
Автор ответа:
ANDREY
Вопросов: 0
Ответов: 33
Профиль | | #13
Добавлено: 28.02.06 13:30
Только еще одно замечьице, мьютексы(mutex) и светофоры(semaphore) это все же разные вещи.
Номер ответа: 14
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #14
Добавлено: 28.02.06 14:14
Разве? А мне казалось, что Mutex - это и есть семафор...
2 Albert: сорри, тогда юзай mutex'ы!
Номер ответа: 15
Автор ответа:
Albert
ICQ: 334-970-670
Вопросов: 14
Ответов: 20
Профиль | | #15
Добавлено: 28.02.06 17:42
В принципе вариант Myhalыча работает! Но у меня в программе Caption в процессе работы программы изменяется (Пр.: При открытие файла, туда помещается кроме названия проги, имя открытого файла)
Вариант "If App.PrevInstance = True Then End" работает (и то криво с ошибками) для случая если приложение запускается из одной папки!!! (т.е. то что надо не получается)
А как с mutex'ом замутить??? Мож кто нибудь намутит кусочек?