Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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
тю...
Как в vb6, если уже запущено одно приложение, запретить повторный запуск этого же приложения??? Что бы десяток не висело. Чтобы просто, при повторном запуске ничего не происходило...


Вставил этот If в Процедуру Form_Load! Но если писать ...Then End то при повторном запуске приложения, происходит просто выход из процедуры Form_Load!


т.е. прога не запускается, что ещё хочешь?

Ответить

Номер ответа: 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-сайт: hw.t-k.ru
 Профиль | | #7
Добавлено: 27.02.06 21:34
Если приложение переименовать, то App.PrevInstance не канает.

Тогда стоит создать какой-нить именоваеый глобальный объект :) Например ФайлМаппинг...

Ответить

Номер ответа: 8
Автор ответа:
 Mihalыch



ICQ: 373-509-101 

Вопросов: 56
Ответов: 330
 Профиль | | #8 Добавлено: 28.02.06 05:47
Если приложение имеет интерфейс т.е. окна, тогда можно по “босятски”.

Option Explicit
    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) и светофоры(semaphore) это все же разные вещи.

Разве? А мне казалось, что 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'ом замутить??? Мож кто нибудь намутит кусочек?

Ответить

Страница: 1 | 2 | 3 | 4 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам