Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

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

 

  Вопрос: Запрет на повторный запуск приложения! Добавлено: 27.02.06 01:40  

Автор вопроса:  Albert | ICQ: 334-970-670 

Ответить

  Ответы Всего ответов: 57  

Номер ответа: 31
Автор ответа:
 ANDREY



Вопросов: 0
Ответов: 33
 Профиль | | #31 Добавлено: 28.02.06 23:01
Мне то же не понятно, зачем извращаться со всякими окошками, если Мьютексы это системный, рекомендуемый мелкомягкими способ. Кроме того, мьютексы всетаки жрут горащздо меньше системных ресурсов, чем (пусть даже и скрытые) окна.

Ответить

Номер ответа: 32
Автор ответа:
 [root]



Вопросов: 45
Ответов: 1212
 Web-сайт: bit.pirit.info
 Профиль | | #32
Добавлено: 01.03.06 08:05
Код вызывает ошибку и создает видимость того, что программу второй раз
не запустишь, вроде и переименовал, а тут ошибка и после ошибки вторая
копия запущена!
Так что вы братцы чего то упустили ;-)

Ответить

Номер ответа: 33
Автор ответа:
 ANDREY



Вопросов: 0
Ответов: 33
 Профиль | | #33 Добавлено: 01.03.06 10:03
Попробуй заменить 0 на GENERIC_ALL.

Ответить

Номер ответа: 34
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #34 Добавлено: 01.03.06 11:17
Можно и по окошку, только никаких тупых дополнительных окон. Просто поиск окна, если находится - то, скажем, GetWindowLong и GWL_USERDATA (чтоб убедиться в том что это действительно то).
Гемора меньше и создавать ничего не надо.

Ответить

Номер ответа: 35
Автор ответа:
 SerJ



Вопросов: 24
Ответов: 332
 Профиль | | #35 Добавлено: 02.03.06 00:58
Гы... А можно ваЩе по-тупому сделать... Когда первая копия проги ранится, чё-то там пишет в реестр (или создаёт файлик). Когда выгружается - удаляет. А когда вторая копия грузится - проверяет - ага - есть ветка (файлик) - выгружаемся нафиг, показываем мессаг (опционально)
:)

Ответить

Номер ответа: 36
Автор ответа:
 SerJ



Вопросов: 24
Ответов: 332
 Профиль | | #36 Добавлено: 02.03.06 01:01
PS. А вы тут обсуждаете разные мютексы, светофоры, семафоры.....

Ответить

Номер ответа: 37
Автор ответа:
 ANDREY



Вопросов: 0
Ответов: 33
 Профиль | | #37 Добавлено: 02.03.06 10:10
А потом, после первой ошибки, когда наша прога неожиданно завершиться, или после первого внезапного отключения электричества, наша прога вообще перестанет запускаться :)

Ответить

Номер ответа: 38
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #38 Добавлено: 02.03.06 11:27
Поиск окна по FindWindow накладывает некоторые ограничения: его нужно делать до создания окна, иначе нарвешься на своё окно и запуститься будет невозможно.
И в то же время FindWindow до создания окна исключает применение GetWindowLong.
GetWindowLong подразумевает получение и сравнение данных для двух окон, но одного из них ещё нет по описанной выше причине, соответственно GetWindowLong не пройдёт

Ответить

Номер ответа: 39
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #39 Добавлено: 02.03.06 11:33
Тут два варианта (минимум)
1. Определять какому именно процессу принадлежит окно. Если нашему - ноль внимания.
2. Изначально задать окну какой-нибудь возмутительный Caption, после проверки - менять.
Подойдет тот же App.Title.
GetWindowLong подразумевает получение UserData из какого-нить окна и сравнение с некой заданной величиной. Запуск лучше организовать через Sub Main.
Ну а так, конечно, я не сторонник метода с FindWindow :)

Ответить

Номер ответа: 40
Автор ответа:
 Victor



ICQ: 345743490 

Вопросов: 42
Ответов: 385
 Web-сайт: vt-dbnz.narod.ru
 Профиль | | #40
Добавлено: 02.03.06 17:27
У метода окошечка есть одно большое преимущество. Он сразу дает возможность передавать в старую копию программы что-нибудь. Командную строку, например. Просто SendMessage.

Подойдет тот же App.Title
Лучше его еще дополнить чем-нибудь. GUID сгенить, например. Чтобы не было конфликтов. А то вдруг юзер имеет окошко с тем самым заголовком? Например, просматривая страничку этой самой программы...

С GetWindowLong по-моему больше возни. Тут уже просто FindWindow не покатит, недо что-нибудь вроде GetWindow или EnumWindows юзать, и каждому проверять юзердату. Хотя меньше системных ресурсов.

PS. Я это сообщение набрал 3 раза. И незадолго перед тем, как я его собирался отпостить, опера вылетала... И все впустую. :\ Блокнот рулит.

Ответить

Номер ответа: 41
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #41 Добавлено: 02.03.06 18:31
Я имел ввиду поменять App.Title

Ответить

Номер ответа: 42
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #42 Добавлено: 02.03.06 21:07
Почему никто не хочет юзать mutex'ы??? Давно проверенный неглючащий способ! И вдобавок, легкий для программирования!

Ответить

Номер ответа: 43
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #43
Добавлено: 02.03.06 23:03
незнакомые функции - пугают :)

Ответить

Номер ответа: 44
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #44
Добавлено: 02.03.06 23:50
капец, ответ №1 был самый лучший... чихать на разные имена

Ответить

Номер ответа: 45
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #45 Добавлено: 03.03.06 14:48

Почему никто не хочет юзать mutex'ы

Ну зачем так категорично? Ты видишь тут толпу протестующих? Просто люди ищут разные решения.

капец, ответ №1 был самый лучший...

Конечно, если не читать последующие :)

Ответить

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

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



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