Страница: 1 | 2 | 3 |
Вопрос: Повторный запуск приложения
Добавлено: 23.11.07 14:00
Автор вопроса: - MaAs† -™ | ICQ: 233628153
Доброго всем времени суток!
Во многих программах есть такая фича - если попробовать запустить два приложения, то второе пишет мол первое уже запущено.
Вопрос - как именно оно определяет это? Например, поиск таких же заголовков форм всех приложений в данном случае не пойдет, его в программе нет. Плюс программа может находится в разных папках. Что делать? Гугл не помог, видно руки кривые...
Ответы
Всего ответов: 42
Номер ответа: 1
Автор ответа:
Алексей
black admin
ICQ: 261779681
Вопросов: 87
Ответов: 633
Web-сайт:
Профиль | | #1
Добавлено: 23.11.07 14:29
http://kbyte.ru/Samples/Show.aspx?id=143
http://kbyte.ru/Forum/Show.aspx?id=578
Номер ответа: 2
Автор ответа:
Retupa
Вопросов: 1
Ответов: 51
Профиль | | #2
Добавлено: 23.11.07 15:21
Думаю тс имел ввиду не совсем это. App.PrevInstance поможет только для запуска одного приложения, достаточно сделать копию и запускать...
- MaAs† -™, как именно оно определяет это неизвестно ) В каждом случае по разному.. Можно создать запись в реестре и проверять её значение при запуске, или открыть\создать файл с блокировкой чтения и записи при старте. (файл должен быть создан и находиться в системной папке, например - темп) или искать в прцессах своё предыдущие приложение...
Номер ответа: 3
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #3
Добавлено: 23.11.07 16:37
Pipe
Номер ответа: 4
Автор ответа:
Stuart
Вопросов: 5
Ответов: 152
Профиль | | #4
Добавлено: 23.11.07 20:24
Если ты хочеш сделать чтобы твоё приложение не льзя было запустить несколько раз, то вот помести этот код в автозагрузку.
If App.PrevInstance Then
MsgBox "Уже запущено"
Unload Me
End If
А как это работает хз, можно много вариантов рассматривать.
А зачем тебе это надо знать, просто любопытство или что то другое?
Номер ответа: 5
Автор ответа:
- MaAs† -™
ICQ: 233628153
Вопросов: 13
Ответов: 29
Профиль | | #5
Добавлено: 23.11.07 22:22
Нет, это нужно для клиентской части приложения некоего грядущего интернет-сервиса 8) А то нехорошо получается когда с одного компа юзер пытается зайти со второй программы, почему именно так - долго обьяснять.
ЗЫ: App.PrevInstance работает на ура, но только если просто повторно запустить из той же папки, если запустить копию то не работает, потому спасибо всем за подсказки, буду думать 8)
Номер ответа: 6
Автор ответа:
Stuart
Вопросов: 5
Ответов: 152
Профиль | | #6
Добавлено: 24.11.07 00:10
Сделай тогда так, чтобы твою программу нельзя было переименовать а если всё таки и переименуют то не смогут запустить, вот по быстрому написал примрчик:
Private Sub Form_Load()
If App.EXEName = "MyProg" Then 'MyProg имя программы скомпилированной MyProg.exe
If App.PrevInstance Then 'чтобы нельзя было запускать несколько раз
MsgBox "Уже запущено"
Unload Me
End If
Else
MsgBox "Ну и кого ты решил на**ать? ", 64, "А вот и не запустиш!!"
Unload Me
End If
End Sub
Номер ответа: 7
Автор ответа:
Stuart
Вопросов: 5
Ответов: 152
Профиль | | #7
Добавлено: 24.11.07 00:14
Т.е. имя программы твоей "MyProg" если ей переименовать во чтонить другое то не запустится она. Криво комментарии написал, и происходит это от того что ночью нужно спать а не на форумах сидеть
Номер ответа: 8
Автор ответа:
- MaAs† -™
ICQ: 233628153
Вопросов: 13
Ответов: 29
Профиль | | #8
Добавлено: 24.11.07 01:30
Спс, респект 8)
Номер ответа: 9
Автор ответа:
Алексей
black admin
ICQ: 261779681
Вопросов: 87
Ответов: 633
Web-сайт:
Профиль | | #9
Добавлено: 24.11.07 04:21
Мдя, не те линки дал Вот оно, то что нужно http://kbyte.ru/forum/show.aspx?id=2317 --> http://kbyte.ru/Unicode/ShowCode.aspx?id=89
Номер ответа: 10
Автор ответа:
Retupa
Вопросов: 1
Ответов: 51
Профиль | | #10
Добавлено: 24.11.07 04:50
Stuart, а если копировать прогу в др. папку, не меняя имени...
Номер ответа: 11
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #11
Добавлено: 24.11.07 14:39
Pipe
Номер ответа: 12
Автор ответа:
Stuart
Вопросов: 5
Ответов: 152
Профиль | | #12
Добавлено: 24.11.07 14:44
Stuart, а если копировать прогу в др. папку, не меняя имени..
Да действительно вчера я это непродумал. Но за то сейчас продумал всё!
Вот еще один примерчик к сожелению я его не так уж и быстро написал как предыдущий, но главное он работает, а работает он следующим образом: сканирует процессы и если он найдет 2 процесс в моем случае программа называется MyProg.exe то программа незапустится воть. Если переименовать прогу то тоже не чего не выйдет. А вот и код:
Const TH32CS_SNAPPROCESS As Long = 2&
Const MAX_PATH As Integer = 260
Private Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As String * MAX_PATH
End Type
Private Declare Function CreateToolhelpSnapshot Lib "Kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function ProcessFirst Lib "Kernel32" Alias "Process32First" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function ProcessNext Lib "Kernel32" Alias "Process32Next" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Sub CloseHandle Lib "Kernel32" (ByVal hPass As Long)
Private Sub Form_Load()
If App.EXEName = "MyProg" Then 'MyProg имя программы
Dim hSnapShot As Long
Dim uProcess As PROCESSENTRY32
Dim r As Long
hSnapShot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&
If hSnapShot = 0 Then
Exit Sub
End If
uProcess.dwSize = Len(uProcess)
r = ProcessFirst(hSnapShot, uProcess)
Do While r
Form1.Caption = uProcess.szExeFile
If Form1.Caption = "MyProg.exe" Then m = m + 1
If Form1.Caption = "MyProg.eXe" Then m = m + 1
If Form1.Caption = "MyProg.EXe" Then m = m + 1
If Form1.Caption = "MyProg.EXE" Then m = m + 1
If Form1.Caption = "MyProg.eXE" Then m = m + 1
r = ProcessNext(hSnapShot, uProcess)
Loop
Call CloseHandle(hSnapShot)
If m = 2 Then
MsgBox "Прога уже запущена", 16, "БАХ!"
End
End If
Else
MsgBox "Ну и кого ты решил на**ать? ", 64, "А вот и не запустиш!!"
End
End If
End Sub
Номер ответа: 13
Автор ответа:
Stuart
Вопросов: 5
Ответов: 152
Профиль | | #13
Добавлено: 24.11.07 14:49
Если надо, Могу так же пример написать, как можно запретить Повторный запуск приложения через Реестр. Но я думаю это не к чему
Номер ответа: 14
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #14
Добавлено: 24.11.07 17:15
ну или Mutex
симафор.. бла да шо угодно, но вариант Stuart мне нравится больше всего!!! )
P.S. Мне тоже плз скиньте чертежи того бульбулятора!!!
Номер ответа: 15
Автор ответа:
Retupa
Вопросов: 1
Ответов: 51
Профиль | | #15
Добавлено: 25.11.07 07:40
Stuart, а если изменить расширение проги не меняя имени... Например, MyProg.com