Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Запрет запуска второй копии приложения
|
|||
|---|---|---|---|
|
#18+
Как запретить запускать копию приложения (написанного на VB.NET), если один раз приложение уже запущено и работает? Если можно, с примером... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2004, 20:18 |
|
||
|
Запрет запуска второй копии приложения
|
|||
|---|---|---|---|
|
#18+
http://www.ai.uga.edu/~mc/SingleInstance.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2004, 21:31 |
|
||
|
Запрет запуска второй копии приложения
|
|||
|---|---|---|---|
|
#18+
Пример классный, только нельзя его для меня интерпретировать на VB.NET plz. Во-первых аглицкий язык не мой родной (ну это ещё куда не шло), а во вторых C# - это точно не моё :(((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2004, 22:03 |
|
||
|
Запрет запуска второй копии приложения
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2004, 22:46 |
|
||
|
Запрет запуска второй копии приложения
|
|||
|---|---|---|---|
|
#18+
Сорри, неверно я наклавиатурил mMutex = New System.Threading.Mutex(True, "qwerty", IsMutexCreatedSuccess) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2004, 22:49 |
|
||
|
Запрет запуска второй копии приложения
|
|||
|---|---|---|---|
|
#18+
Да метод интересный и что главное, вроде работает ) Кстати декларировать ничего вне процедур не надо можно и так Dim mMutex As New System.Threading.Mutex(True, "qwerty", IsMutexCreatedSuccess) Без shared. Спасибки. Если кто знает ещё метод, пришлите, попробую. Кстати, интересно отчего у людей такой интерес к C#????? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2004, 23:41 |
|
||
|
Запрет запуска второй копии приложения
|
|||
|---|---|---|---|
|
#18+
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim k As Integer Dim m As Process = Process.GetCurrentProcess() Dim mm() As Process = Process.GetProcessesByName(m.ProcessName, "machine_name") Dim p As Process For Each p In mm If p.MainModule.ModuleName = m.MainModule.ModuleName Then k += 1 End If Next If k > 1 Then System.Diagnostics.Process.GetCurrentProcess.Kill() End Sub Во как!!! Остаётся тока програмно узнать имя машины???? (Может кто подскажет как???) :((( А количество копий можно задать параметром k>1 одна копия, k>2 две и т.д. Вариант greenapple работает, но не всегда срабатывает почему-то, и всё равно ему огромное спасибо - это он меня натолкнул на мысль... Извиняюсь что код опубликован не по правилам форума. На своём сайте http://kotishka.homeip.net обязательно положу этот листинг красиво оформленным... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2004, 03:56 |
|
||
|
Запрет запуска второй копии приложения
|
|||
|---|---|---|---|
|
#18+
Узнать имя машины можно так: Переменная = Environment.MachineName ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2004, 21:13 |
|
||
|
Запрет запуска второй копии приложения
|
|||
|---|---|---|---|
|
#18+
собственно по ссылке все написано, про переменные, и про скорость выполнения. На мой взгляд, если существующий процесс не нужен для каких-то целей, то лучше и правильнее более простой и быстрый метод. По поводу не всегда работает, это может быть связано в частности с областью видимости ссылки на мьютекс. Я не уверен в правильности вызова GC.KeepAlive(mMutex) в этом месте. Если кто-то знает, подскажите, плз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2004, 22:34 |
|
||
|
Запрет запуска второй копии приложения
|
|||
|---|---|---|---|
|
#18+
Не хотел я никого обидеть. Greenapple - в частности тебя. И пример мой, конечно пример с твоей ссылки, тока доработаный в VB.NET. Просто твой метод дейсвительно не всегда срабатывал :(((( А этот метод работает железно (пусть люди и то и то попробуют) - им выбирать. А может и другой, более рациональный метод предложат. Я бы с удовольствием рассмотрел и что-то другое. Меня теперь другой вопрос мучает. Если приложение повесить в трей и кто то нажмёт (не заметив его там) на запуск приложения второй раз - КАК ПРИЛОЖЕНИЕ ПОДНЯТЬ ИЗ ТРЕЯ???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2004, 02:37 |
|
||
|
Запрет запуска второй копии приложения
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. Смысл в общем ясен? А по второму вопросу - сырцы, поставляемые со средой разработки смотреть иногда не мешает для ознакомления. ...Visual Studio .NET/VB7/VB Samples/WinForms-SysTraySample/ Вот там и гляди и наступит тебе счастие :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2004, 09:59 |
|
||
|
Запрет запуска второй копии приложения
|
|||
|---|---|---|---|
|
#18+
Вот, чувствуется рука мастера :)) Весь мой код уложил в одну строку... А насчёт сырцов - счастье тому у кого версия не палёная VS.NET В моей нет сырцов (к сожалению). Да и тему ты наверное не понял. Просто из трея поднять не проблема... Проблема поднять процессом, который мы потом убиваем и кто то нажмёт (не заметив его там) на запуск приложения второй раз ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2004, 12:57 |
|
||
|
Запрет запуска второй копии приложения
|
|||
|---|---|---|---|
|
#18+
Так и есть, во втором вопросе ты не разобрался. Я тут денежек не пожалел - купил нормальную VS.NET нашёл samples(system tray) Из bin стока солнышек поназапускалось в tray... А вот как чтоб это солнышко постоянно одно было - вот фишка??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2004, 13:41 |
|
||
|
Запрет запуска второй копии приложения
|
|||
|---|---|---|---|
|
#18+
Нашёл как-то на www.gotdotnet.ru и перевёл на VB.NET некоторые моменты наверное можно улучшить... Код: 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. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2004, 23:52 |
|
||
|
Запрет запуска второй копии приложения
|
|||
|---|---|---|---|
|
#18+
Странные Вы, Господа - это наверное потому, что от рождения такие умные ( перевёл с одного языка на другой ). А мне действительно интересно всё это узнать (и листинг этот длинный по случаю найденный и ЛЮБЕЗНО переведённый попробую). А главное тема то действительно интересная - ВОН как количество просмотров растёт. Людям нужно простые вещи выяснить, а Вы как тихоокеанские лайнеры снисхождение делаете... Выясняете какой язык лучше VB или C#, а помочь нам неразумным в ТЯГОСТЬ. За ответы всем БОЛЬШОЕ тихоокеанское СПАСИБО. Но не надейтесь, что я на этом остановлюсь - возникнут вопросы ОБЯЗАТЕЛЬНО потревожу Вашу водную стихию )) С уважением vladgrig ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2004, 00:58 |
|
||
|
Запрет запуска второй копии приложения
|
|||
|---|---|---|---|
|
#18+
vladgrig Странные Вы, Господа - это наверное потому, что от рождения такие умные (перевёл с одного языка на другой). А мне действительно интересно всё это узнать (и листинг этот длинный по случаю найденный и ЛЮБЕЗНО переведённый попробую). А главное тема то действительно интересная - ВОН как количество просмотров растёт. Людям нужно простые вещи выяснить, а Вы как тихоокеанские лайнеры снисхождение делаете... Выясняете какой язык лучше VB или C#, а помочь нам неразумным в ТЯГОСТЬ. За ответы всем БОЛЬШОЕ тихоокеанское СПАСИБО. Но не надейтесь, что я на этом остановлюсь - возникнут вопросы ОБЯЗАТЕЛЬНО потревожу Вашу водную стихию )) С уважением vladgrig 1. Это верно умные от рождения потом глупеем... 2. Найден был не по случаю а в результате поиска и переведён не из любезности а для себя поскольку интересовался темой 3. Коментарии автора остались в первозданном виде вроде всё должно быть понятно на крайний случай (самый крайний) есть MSDN 4. Думаю что тот язык лучше тот в котором Вы лучше себя чувствуете 5. За спасибо Вам чуть менее большое балтийское пожалуйста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2004, 10:58 |
|
||
|
Запрет запуска второй копии приложения
|
|||
|---|---|---|---|
|
#18+
Хорошо, не будем препираться (дело от этого не выйграет). Я не скрываю что только начинаю учёбу VB (возникла необходимость по работе, да и самому интересно стало). С приведёнными Вами классами я как начинающий вроде разобрался, (благо книга была под рукой) создал dll, монтирую её в проект, CheckOneInstance.IsInstanceExist - это понятно, а остальное нельзя по подробней plz. Думаю всем таким же как я будет крайне интересно прочесть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2004, 11:49 |
|
||
|
Запрет запуска второй копии приложения
|
|||
|---|---|---|---|
|
#18+
2 желаю знать почему Спасибо, очень полезный пример. Надо бы добавить GC.KeepAlive, раз Jon Skeet советует 2 vladgrig надо стремиться к знанию и C# и VB.NET, это достижимо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2004, 13:41 |
|
||
|
Запрет запуска второй копии приложения
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. greenaple, хоть Вы накрапайте, правильно ли я понял функцию созданного класса??? И по остальным его функциям маленький экскурс... plz (обещаю, что буду учить и C#)... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2004, 15:35 |
|
||
|
Запрет запуска второй копии приложения
|
|||
|---|---|---|---|
|
#18+
Нет, не правильно, но прогресс есть :): Dim a As New CheckOneInstance это писать не нужно, члены shared, инстанс не нужен функция проверяет, есть ли экземпляр приложения, а фактически проверяет, захвачен ли мьютекс с определенным именем в операционной системе, или нет. Если он захвачен, то она завершается с результатом False (самая последняя строка в ней) Если нет, то проверяется, нужно ли активировать (показывать) окно (If False = activateFirstInstance Then Return True), если нет - просто выход с параметром True. Если да, то на основе текущего процесса действуем с окном. Класс FindWindowEngine нужен для поиска окон. Вот это: <DllImport("User32.dll")> _ это добавление вызовов API-функций из User32.dll, библиотеки для интерфейса пользователя Кстати, пока писал, совет созрел: ''Создавать экземпляры этого класса нет смысла Public Sub New() MyBase.New() End Sub можно написать просто Private Sub New() MyBase.New() End Sub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2004, 17:42 |
|
||
|
Запрет запуска второй копии приложения
|
|||
|---|---|---|---|
|
#18+
да, получив из этой функции True результат System.Diagnostics.Process.GetCurrentProcess.Kill() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2004, 17:44 |
|
||
|
Запрет запуска второй копии приложения
|
|||
|---|---|---|---|
|
#18+
Да уж, еле-еле душа в теле... Спасибки за науку... Поучительно... Код: plaintext 1. 2. 3. 4. 5. 6. Я надеюсь так - ПРАВИЛЬНО. Главное, что этот метод поднимает минимизированное окно первого процесса (возможно нехотя дали ответ и на второй интересующий меня вопрос) Для меня эта тема является закрытой. Всем СПАСИБО (большое и человеческое) P.S. До встречи на следующих дебатах ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2004, 20:06 |
|
||
|
Запрет запуска второй копии приложения
|
|||
|---|---|---|---|
|
#18+
закралась пара ошибок... вместо Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. должно быть Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2004, 11:53 |
|
||
|
Запрет запуска второй копии приложения
|
|||
|---|---|---|---|
|
#18+
а использовать наверное будет лучше так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 2 greenapple GC.KeepAlive в данном примере мне представляется не нужным ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2004, 12:02 |
|
||
|
Запрет запуска второй копии приложения
|
|||
|---|---|---|---|
|
#18+
Хорошо, разговоры продолжаются (можно я ещё вопрос задам?) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Этот пример я нашёл на dotnet.ru . Попробовал с Вашим классом - не поднимает форму :((( Если есть возможность может и это можно решить (где то, например, в ваш класс решение вставить)??? И тогда, на мой взгляд, класс будет - ПРОСТО КЛАСС (я не язвлю, а выражаю собственный восторг от всего сердца) P.S. Приложение в системтрай - это не необходимость (для меня), посему вопрос - теоретический. Заранее извиняюсь, если я этой функции не заметил в Вашем классе (если так, то опишите как её найти и использовать, plz) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2004, 14:31 |
|
||
|
|

start [/forum/topic.php?fid=20&msg=32475555&tid=1439314]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
58ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
79ms |
get tp. blocked users: |
2ms |
| others: | 235ms |
| total: | 425ms |

| 0 / 0 |
