Страница: 1 | 2 | 3 | 4 |
Вопрос: Запрет на повторный запуск приложения!
Добавлено: 27.02.06 01:40
Автор вопроса: Albert | ICQ: 334-970-670
Ответы
Всего ответов: 57
Номер ответа: 46
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #46
Добавлено: 03.03.06 17:19
Было похожее реализовано в одной небольшой игрушке... За это я готов был
убить аффтара При определенных глюках игры из нее нельзя было выйти
"нормально" и приходилось убивать процесс через TaskManager, после
чего соответственно запустить игру повторно было невозможно.
Так что это не вариант.
А так, насколько я знаю, самый популярный вариант решения задачи - это
именно мьютексы.
Номер ответа: 47
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #47
Добавлено: 03.03.06 17:29
Так что это не вариант.
Ну почему же. Прописываешься куда-нить в RunOnce - и после перезагрузки усё пучком )
Номер ответа: 48
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #48
Добавлено: 03.03.06 17:53
Номер ответа: 49
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #49
Добавлено: 03.03.06 20:42
da poh na raznie imena
Номер ответа: 50
Автор ответа:
SerJ
Вопросов: 24
Ответов: 332
Профиль | | #50
Добавлено: 03.03.06 22:48
Гы. №32 тоже полезный
Номер ответа: 51
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #51
Добавлено: 04.03.06 20:25
Не, а че, у меня mutex'ы пашут отлично, даже если прогу вырубить через Task Manager
Номер ответа: 52
Автор ответа:
Fever
Вопросов: 60
Ответов: 808
Профиль | | #52
Добавлено: 07.03.06 19:15
Не заморачивайтесь! Проще веточка в реестре. Только может поглючить при жесткой выгрузке, но это уж юзер виноват. Хотя такая ситуация тоже исправляется-надо в реестр писать Hwnd, а потом проверять-есть таое окно или нет.
Номер ответа: 53
Автор ответа:
Victor
ICQ: 345743490
Вопросов: 42
Ответов: 385
Web-сайт:
Профиль | | #53
Добавлено: 07.03.06 20:42
Да он [юзер] вообще сам виноват, что решил использовать эту программу.
HWnd писать - неплохо в принципе, но вдруг этот hWnd изменится по тем или иным причинам. Или накладочка выйдет... Короче, хватит уже способов. Куда уж проще мьютексов?
Номер ответа: 54
Автор ответа:
SerJ
Вопросов: 24
Ответов: 332
Профиль | | #54
Добавлено: 07.03.06 20:53
Дык не только HWND писать, а ещё чё-то...
Но, на счёт mutexОВ, соглашусь, тоже неплохой вариант. И ваще, необязательно, чтобы был только один способ (хороший). Их минимум при решении практически любой задачи - 2
Номер ответа: 55
Автор ответа:
[root]
Вопросов: 45
Ответов: 1212
Web-сайт:
Профиль | | #55
Добавлено: 09.03.06 09:12
Вот чего нарыл:
If (semHNDL <> 0) Then RC& = ReleaseSemaphore(semHNDL, 1, CC&
End
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If (semHNDL <> 0) Then RC& = ReleaseSemaphore(semHNDL, 1, CC&
Cancel = 0
End Sub
Добавляем к проекту модуль. В область кода заносим:
Public Declare Function CreateSemaphore Lib "kernel32" _
Alias "CreateSemaphoreA" _
 ByVal lpSemaphoreAttributes As Long, _
ByVal lInitialCount As Long, _
ByVal lMaximumCount As Long, _
ByVal lpName As String) As Long
Public Declare Function ReleaseSemaphore Lib "kernel32" _
 ByVal hSemaphore As Long, _
ByVal lReleaseCount As Long, _
lpPreviousCount As Long) As Long
Global semHNDL As Long
Sub Main()
Err.Clear
semHNDL = CreateSemaphore(0, 0, 1, "Cats_Tail"
RC& = Err.LastDllError
If (RC& <> 0) Or (semHNDL = 0) Then
'::: Это - не первый экземпляр
MsgBox "Повторный запуск!"
End
End If
Form1.Show
End Sub
Устанавливаем startup-объект - "SUB MAIN".
Номер ответа: 56
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #56
Добавлено: 09.03.06 12:09
Да уж, верно говорят - люди ищут самые нерациональные решения. Или тут соревнование - кто напишет больше строк кода для простой задачи?
HWnd писать - неплохо в принципе
С реестром можно на правах погореть. Да и вариант совпадения hWnd не исключается.
Самый руль - все же PrevInstance. Переименовывать прогу нефиг, это только пиратам понадобиться может. Еще лучше - поставить проверку на App.EXEName. Если не совпадает - пишем что-нить вроде "Иди нахрен, грязный пират" и выгружаемси
Номер ответа: 57
Автор ответа:
SerJ
Вопросов: 24
Ответов: 332
Профиль | | #57
Добавлено: 10.03.06 00:32
Хм, а действительно. Этот вариант, пожалуй, самый эффектив.