Страница: 1 | 2 | 3 | 4 |
Вопрос: Запрет на повторный запуск приложения!
Добавлено: 27.02.06 01:40
Автор вопроса: Albert | ICQ: 334-970-670
Ответы
Всего ответов: 57
Номер ответа: 16
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #16
Добавлено: 28.02.06 17:53
FindWindow будет быстрее чем получение списка процессов...
Номер ответа: 17
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #17
Добавлено: 28.02.06 17:58
А если твоя программа называется svhost.exe )) Не это плохой способ, имхо
2ANDREY
Светофоров нема... а вот семафоры имеюцца...
2Sacred Phoenix, это все объекты ядра, используются для синхронизации потоков... Вот только программисты об этом "не знают" и используют их для всего чего попало Так что разницы особой нет
Номер ответа: 18
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #18
Добавлено: 28.02.06 18:02
Быстрее то да, но тут везде свои недостатки.
При FindWindow нужно искать нестрогое соответствие, поскольку Caption меняется. То есть, либо через Left$, либо InStr, но тут нет гарантии что поиск не пересечется с другим случайным окном.
Для получения списка процессов - сложновато будет определить схожий процесс при переименовании exe файла.
Через mutex все бы хорошо, но при "неформальном" завершении программы перезапустить её будет проблематично.
В общем, кому что. Я обычно пользовался процессами, но у меня задача была другая - загасить не вновь запускаемое, а ранее запущенное приложение.
Номер ответа: 19
Автор ответа:
ANDREY
Вопросов: 0
Ответов: 33
Профиль | | #19
Добавлено: 28.02.06 18:13
Особенно те объекты, про которые в MSDN написано
Номер ответа: 20
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #20
Добавлено: 28.02.06 18:55
Проблема в том что процесс может остаться в памяти. И хэндлы закрыты не будут.
В принципе, то же можно сделать и через CreateEvent. Тут главная проблема - отследить наличие работающего приложения. Хотя тут уже вопрос в том, насколько криворуко оно написано.
Номер ответа: 21
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #21
Добавлено: 28.02.06 18:55
не знают - в кавычках
Номер ответа: 22
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #22
Добавлено: 28.02.06 18:56
не знают - в кавычках
Номер ответа: 23
Автор ответа:
ANDREY
Вопросов: 0
Ответов: 33
Профиль | | #23
Добавлено: 28.02.06 19:03
Номер ответа: 24
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #24
Добавлено: 28.02.06 19:04
invoke GetLastError
.if (eax == ERROR_ALREADY_EXISTS)
invoke MessageBox, 0, 0, 0, 0
.endif
jmp $
Пара строчек и спора нет Убивал как положено из Диспетчера задач
Номер ответа: 25
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #25
Добавлено: 28.02.06 19:05
ЗЫ
После убийства процесса:
eax != ERROR_ALREADY_EXISTS
Номер ответа: 26
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #26
Добавлено: 28.02.06 19:19
http://forum.ixbt.com/post.cgi?id=print:40:682
Номер ответа: 27
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #27
Добавлено: 28.02.06 19:44
У них у фсех устарефшая ферсия финдофса )
Номер ответа: 28
Автор ответа:
Victor
ICQ: 345743490
Вопросов: 42
Ответов: 385
Web-сайт:
Профиль | | #28
Добавлено: 28.02.06 21:41
Чтобы не было проблем с заголовком окна, можно создать отдельное невидимое окошечко с чем-нибудь хорошим на заголовке. Можно GUIDGen заюзать.
С окошечком, пожалуй, самое надежное.
ЗЫ. Но если кто-то действительно захочет запустить две копии - так пусть запускает. Жалко чтоли, если у него от этого что-то плохое произойдет? Сам ведь виноват будет, нефиг было лазить где не положено.
Номер ответа: 29
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #29
Добавлено: 28.02.06 22:36
Мне тоже идея нравится! А окошечко можно создавать по примеру товарища sne (где еще создание собственного класса). Главное намутить что-нибудь в Caption'е. Хотя с другой стороны шанс путаницы с другим окошком остается, но он становится намного меньше
Номер ответа: 30
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #30
Добавлено: 28.02.06 22:45
2 sne: а у меня этот шмоток кода работает на "ура":
Private Const ERROR_ALREADY_EXISTS = 183&
Option Explicit
Private Sub Form_Load()
Call CreateMutex(0, False, "Copyright © Sacred Phoenix, 2006, "
If Err.LastDllError = ERROR_ALREADY_EXISTS Then Call MsgBox("ERROR_ALREADY_EXISTS", vbCritical, "Error occured"
End Sub