|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
Т.Е. если оно уже запущено (например свернуто окно, а пользователь его не видит, то просто развернуть его). Нужна очень эта "защита от дураков" ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2004, 15:09 |
|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
http://www.sql.ru/forum/actualthread.aspx?tid=88788 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2004, 15:11 |
|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
Да.. ?! А если заголовок окна приложения меняется в самом приложении, например содержит имя пользователя, работающего в данный момент с приложением ? С уважением, Алексей. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2004, 22:08 |
|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
Тебе поможет объект ядра мьютекс. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2004, 22:22 |
|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
Простейший вариант: -) На стороне клиента создается свободный DBF (пустой, с одним полем) -) При открытии приложения этот DBF открывается в режиме EXCLUSIVE -) Если получили ошибку " File access is denied (Error 1705) " значит приложение уже открыто Одновременно, этот файл может служить признаком корректного завершения приложения, если его удалять при закрытии приложения. Т.е. если при входе в приложение файл уже существует и еще не открыт в режиме EXCLUSIVE, значит последнее завершение приложения было некорректно. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2004, 09:42 |
|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
Вариант с DBF хороший, я сам его использовал. Очень редко, но все-таки случались ситуации, когда с момента старта программы до открытия контрольного файла программа успевала все-таки загрузиться дважды, но в принципе работает. Отказался потому, что требовалось запускать программу реально несколько раз параллельно для работы с разными базами данных. Использовал так-же вариант открытия контрольного окна, сейчас уже не помню почему, но и от него отказался. Из всех вариантов на фоксе самые надежные результаты мне дал вариант, когда после старта программы выдается приглашение на ввод сегодняшнего числа (например). Программа может загрузиться несколько раз, но если пользователь не ввел дату в которой он хочет работать (разумеется для даты сегодня достаточно было нажать всего одну кнопку), то через одну минуту приложение не получив отклика юзера корректно закрывается. Разумеется сколько-бы раз программа не стартовала, ответ от юзера получит только одна сессия. В насстоящее время кроме этого я использую специально написанный на VC+ MFC стартер с вариантом Mutex. Результат прекрасный. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2004, 13:39 |
|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
Чем такой подход не нравиться ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44.
Не все ошибки выполнения функций обработаны, но это уже дело вкуса. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2004, 14:26 |
|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
Маленькая неточность, нужно вот так : Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2004, 14:29 |
|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
2 luser Надо соблюдать правила хорошего тона: ReleaseMutex(hMutex) - в данном случае ни на что не влияет, поскольку синхронизация у тебя идет не через Wait функции CloseHandle(hMutex) - а вот без этого под 98 у тебя может случится конфуз - вроде ты и вышел из приложения, а повторно зайти не можешь ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2004, 18:30 |
|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
Cогласен. Даже не знаю, почему я написал Release, видимо о чем-то еще думал. Хорошее конструктивное замечание. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2004, 18:33 |
|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
>> а вот без этого под 98 у тебя может случится конфуз не понял, какой может быть конфуз. Mutant также убъется при выгрузке приложения, как и в другой Windows или я не прав ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2004, 12:31 |
|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
Как вариант: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44.
Пример использования: Код: plaintext 1. 2. 3.
duШes ....return ThisForm.exGrid1.p_oColumns("COLUMN1").M_AddHeader("header4",4) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2004, 09:19 |
|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
Hi Dushes! Угу, это понятно. Кстати имя процесса в системе - НЕ ЕСТЬ уникальный его идентификатор. Тогда уж стоит вынимать и полный путь к модулю (учитывая особенности для процессов запускаемых при Boot-инге системы в обращении к элементам ФС). Мне тут почему-то вспомнился троян, маскировавшийся под svchost.dll, и даже прописавшийся в %WINDIR% - тогда как "настойщий" svchost обитает в %WINDIR%\system32. Также не вполне очевидны особенности работы такого метода под Terminal Services - но там вообще масса нюансов :) Posted via ActualForum NNTP Server 1.1 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2004, 05:42 |
|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
Привет, Игорь. Мое мнение таково что данный вариант всяко лучше чем отслеживать капшн окна приложения, к тому же как правило само приложение запускается из одного каталога (в пределах клиентской станции)...Если принять что имя процесса не есть уникальное название, ничто не мешает использовать AGETFILEVERSION для проверки компании, автора, номера версии и пр... К тому же, получив хэндл приложения, используя API, не трудно определить стартовый каталог приложения....но это опять-таки особенности реализации;)... С уважением duШes ....return This.MultiColumnTreView.p_oNodes["key_node_13"].p_oSubItems[3].p_cText ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2004, 08:57 |
|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
Делается так: Работает на 98/2000/XP DECLARE INTEGER OpenEvent IN kernel32 AS oe ; integer a, integer b, String c DECLARE INTEGER CreateEvent IN kernel32 AS ce ; integer b1,integer b2,integer b3, String c1 IF NOT EMPTY(oe(1,0,"666")) MESSAGEBOX('Программа уже запущена!',16,'Ошибка') QUIT ENDIF ce(0,0,1,"666") ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2004, 09:57 |
|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
А какая разница ? :)) Что мьтекс , что событие объекты ядра :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2004, 13:24 |
|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
Тогда уж самый просто способ, до загурзки главного окна делать Declare Integer FindWindow in Win32Api string @, string @ Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2004, 13:36 |
|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
Наоборт : Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2004, 13:37 |
|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
Hi luser! Нет, по заголовку искать - это плохо - заголовок может изменяться - причём достаточно много ситуаций к этому ведут. Всё-же объекты ядра это значительно надёжнее. А из них для этой цели лучше всего подходит именно Mutex. Posted via ActualForum NNTP Server 1.1 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2004, 02:12 |
|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
http://vfpdev.narod.ru/util_r.html А там к предотвращению повторного запуска приложения, если заголовок основного окна может меняться http://vfpdev.narod.ru/download/multex.zip ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2004, 09:30 |
|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
>> А из них для этой цели лучше всего подходит именно Mutex. А почему именно Mutex? В данной ситуации абсолютно все равно: Mutex, Event, Semaphore или кто еще чего знает. У них у всех общее свойство - уникальное в пределах системы имя (что вобщем-то есть у файлов) и автоматическое "удаление из системы" в случае краха процесса, который их создал (чего нет у файлов). То чем они отличаются, для данной задачи не имеет никакого значения. Пишу только затем, чтобы люди не кинулись переделывать программы где используются не Mutex на Mutex ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2004, 15:43 |
|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
То oleg_km: Подходит именно потому, что именно этих целей и предназначен, в отличии от всего другого. Вообщем потому что так "партия" приказала, если будет угодно ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2004, 15:49 |
|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
>> Подходит именно потому, что именно этих целей и предназначен Ну тогда чушь это. Если на то пошло, Mutex предназначен что бы его один процесс захватывал через WaitForSingleObject (например), а другой/другие процесс/ы ждал, используя ту же функцию, пока первый освободит этот Mutex, используя ReleaseMutex. Ну и где в данном случае используется хоть одна из этих функций? Данное использование объектов ядра вообще-то является, скажем так, трюком, побочным использованием свойств этих объектов. А Mutex не больше подходит для этих целей, просто в KB Microsoft именно Mutex использовала для примера, как предотвратить повторный запуск приложений, потому как использовавшийся ранее (в Win16) способ в Win32 перестал работать. Я это все к тому, что если кто-то реализовал это через Event например, переделывать ничего не нужно, никакая "партия" ничего не приказывала. Просто задевает то, что мы все грамотные люди, принимаем только проверенные вещи, а в данном случае как-то это шаманством отдает. Короче, нет слов ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2004, 18:17 |
|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
Что ж ты неугомонный такой ? Амбициозный и неугомонный. Вам, сэр - прямая дорога в МSDN в раздел "сихронизация потоков и процессов". Надеюсь по английски читаете свободно. А вот то что вы написало в прошлом посте точная чушь. Вообщем читайте, изучайте, пробуйте, потом амбиции Ваши будем обсудать. Пока я вижу с Вами обсуждать нечего. Все слишком сильно запущено. =Тему можно закрывать= ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2004, 19:00 |
|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
Hi oleg_km! 1) Никто не говорил переписывать работающий код. 2) Надеюсь у Вас не вызывает сомнения, что микроскопом (самым заурядным, оптическим) МОЖНО забивать гвозди? Причём достаточно эффективно. 3) С чего вы решили, что создаваемый Mutex не захватывается? В каноническом коде он именно и захватывается при создании! И "отпускается на волю" при завершении приложения. Совсем иное дело, что Wait* функции реально не используются В ДАННОМ КОНТЕКСТЕ - ибо мы не запускаем ДРУГОЕ приложение, которое должно дождаться завершения данного для своей работы. Но такая ситуация вполне возможна. Особенно если в сисеме помимо обычных интерактивных (GUI) приложений фунциклируют ещё и демоны/сервисы/BatchJob-ы и тому подобное "подковёрное" ПО. Posted via ActualForum NNTP Server 1.1 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2004, 01:10 |
|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
Ну все съехало на флейм. Не буду дальше спорить, потому, как оспариваются уже мои познания Win32. Скажу только, что читал и MSDN, и Джеффри Рихтера и Хелен Кастер, и недокументированную Windows NT Коберниченко, написал программу с реальным использованием и Event'ов и Mutex'ов именно для синхронизации процессов и достаточно хорошо представляю что такое объекты синхронизации. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2004, 09:34 |
|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
Доброго времени суток! Dushes Как вариант: Код: sql 1. 2. 3. 4. 5. 6. 7.
Процес и ИД . А можно из "proc" еще и имя пользователя выцарапать? Собственно мне нужно проверить наличие процесса у пользователя терминалки (последний может быть открыт другими юзверами) Проверка на процесс+sys(0) Заранее благодарен ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2016, 16:01 |
|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
rock-n-rollПроцес и ИД . А можно из "proc" еще и имя пользователя выцарапать?ЗАЧЕМ? Собственно мне нужно проверить наличие процесса у пользователя терминалки (последний может быть открыт другими юзверами)Другой юзер работает в другой теринальной сессии. А сессии содержимое друг друга не видят.Проверка на процесс+sys(0)Еще раз - нафига? Пользователи терминалки друг друга не видят. В одной терминальной сессии не может быть более одного пользователя. Не надо пытаться быть святее Папы римского и из прикладного софта пытаться делать административные вещи. Или очень захотелось ограничить одним процессом на всю терминалку? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2016, 16:12 |
|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
Наверно как-то можно, погугли каким WinAPI диспетчер задач пользуется. Только без админских прав виндовс просто тебе не покажет все процессы. rock-n-rollСобственно мне нужно проверить наличие процесса у пользователя терминалки (последний может быть открыт другими юзверами) Выше примеры с именованными мутексами. 1068527 Только там поправить немного надо чтобы в терминале работало, добавить "Global\" к названию объекта, тогда он будет общий для всех сессий. Код: sql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2016, 16:40 |
|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
правильный проходящий. Пользователи терминалки друг друга не видят. В одной терминальной сессии не может быть более одного пользователя. Здесь под админом , но и под рядовым могу такую же картинку Все все видят. Вопрос лишь ху из ху. Dima T погугли каким WinAPI диспетчер задач пользуется Все правильно- так и должно быть, но как надеялось на "блюдечко с голубой каемочкой" Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2016, 18:38 |
|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
rock-n-roll,ой ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2016, 18:46 |
|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
rock-n-rollDima T погугли каким WinAPI диспетчер задач пользуется Все правильно- так и должно быть, но как надеялось на "блюдечко с голубой каемочкой" Спасибо Все темы связанные с ограничениями доступа виндовса очень слабо раскрыты. Как-то гуглил как сделать тот же мутекс доступным в разных сессиях, т.е. не просто использовать его как флаг (запущена/незапущена прога), а как полноценный мутекс. С трудом нарыл пример на C#, на голом WinAPI так и не смог сделать. Толи МС перемудрил с безопасностью (простейшие примеры на MSDN не одна сотня строк, в книгах тоже особо ее не раскрывают), толи просто тема неактуальная и никто по ней ничего не пишет. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2016, 18:54 |
|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
Почитай гугл там такие портянки приводят что на фоксе устанешь писать. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2016, 19:04 |
|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
Dima T, Ну если гуру затрудняются, что взять со смертных Спасибо еще раз, вопрос снимаю. В принципе и задумка была не кон необходимая, оставлю как есть- юзверь лишний раз "глазом увидев, пальчиком кнопочку нажмет"- оно там не часто. Спасибо еще раз ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2016, 19:34 |
|
Как сделать, чтобы приложение не запускалось второй раз
|
|||
---|---|---|---|
#18+
rock-n-rollВ принципе и задумка была не кон необходимая, оставлю как есть- юзверь лишний раз "глазом увидев, пальчиком кнопочку нажмет"- оно там не часто. Спасибо еще раз Ты бы лучше задумку свою описал, может и решение попроще нашлось бы. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2016, 19:44 |
|
|
start [/forum/topic.php?all=1&fid=41&tid=1582123]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
137ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
others: | 262ms |
total: | 494ms |
0 / 0 |