|
|
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
Такой код работает, но если войти на комп удаленно под другим пользователем , то программу запустить можно. Код: pascal 1. 2. 3. 4. 5. 6. 7. Если написать так (если я правильно понял MSDN) Код: pascal 1. то GetLastError() вообще 0 возвращает, программу тогда можно запустить и под одним пользователем два раза. Собственно вопрос. Какой флаг нужно выбросить в систему, что программу нельзя было запустить два раза на компьютере? Предложение сделать сервис рассматривается, но там есть другие проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2018, 10:26 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
Влияние на другого пользователя - это то, что должны и могут делать только администраторы, а не обычные пользователи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2018, 11:01 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
Вот пример на С (WinAPI), переделать не трудно: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2018, 11:19 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
Все запускаются с одного ЕХЕ, или может быть неск. копий ЕХЕ в юзерских папках ? В общей папке можно создать и заблокировать некий файл. Тогда попытка пересоздать файл другой копией закончится ошибкой. Как вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2018, 11:25 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
Я всё равно запущу несколько копий, на нескольких виртуалках. Если мне нужны несколько копий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2018, 11:31 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
minva, ты на сравнивай с ERROR_ALREADY_EXISTS Код: pascal 1. - ты просто проверяй, не создался ли мьютекс. Если такой юзер уже есть, мьютекс не будет создан. И ParamStr(1) для генерации имени не используй: переименуют файл экзешника, и все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2018, 11:53 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
DimaBrЯ всё равно запущу несколько копий, на нескольких виртуалках. Если мне нужны несколько копий. Бывает, что нужна защита не от злоумышленника. Например, от повторного запуска приложения-сервера, которое слушает tcp порт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2018, 11:56 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
чччДНапример, от повторного запуска приложения-сервера, которое слушает tcp порт. Обработка ошибки "port in use" от listen() за пределами способностей современных программистов?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2018, 12:04 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
Есть вот такая реализация, может поможет. //wrSession - Allow only one instance per login session //wrDesktop - Allow only one instance on current desktop //wrTrustee - Allow only one instance for current user //wrSystem - Allow only one instance at all (on the whole system) Код: pascal 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. Код: pascal 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2018, 12:16 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovчччДНапример, от повторного запуска приложения-сервера, которое слушает tcp порт. Обработка ошибки "port in use" от listen() за пределами способностей современных программистов?.. Ну вот и расскажи про это своим друзьям-разработчикам фаерберда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2018, 12:28 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
чччДНу вот и расскажи про это своим друзьям-разработчикам фаерберда. Firebird, в отличии от некоторых, работает по многим протоколам и проблемы с одним из них - не повод отказываться работать вообще. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2018, 13:11 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovчччДНу вот и расскажи про это своим друзьям-разработчикам фаерберда. Firebird, в отличии от некоторых, работает по многим протоколам и проблемы с одним из них - не повод отказываться работать вообще. Странный метод общения. Ты отвечаешь на придуманные именно тобой якобы проблемы у собеседника. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2018, 13:25 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
чччДТы отвечаешь на придуманные именно тобой якобы проблемы у собеседника.Да нет, он имел ввиду проблемы в работе одного из протоколов Firebird после запуска. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2018, 13:46 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
чччДИ ParamStr(1) для генерации имени не используй: переименуют файл экзешника, и все.При чем здесь ParamStr(1) и имя экзешника? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2018, 14:43 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, да, это первый параметр, не имя модуля, ни при чем, лоханулся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2018, 14:46 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
minvaСобственно вопрос. Какой флаг нужно выбросить в систему, что программу нельзя было запустить два раза на компьютере? Очевидно, использовать средства, независящие от контекста пользователя. Можно просто файл лочить, а-ля BDE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2018, 15:00 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
X-Cite, Не хватает для текущей сети :-) Как ведет под терминальным сервером? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2018, 11:27 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
Когда то использвоваль этот либ может поможет http://www.loonies.narod.ru/t-one-instance.htm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2018, 07:38 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
minva, Если еще актуально. Функция проверки работающего приложения Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. В главном модуле Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. константы можно определить как угодно в моём случае Код: pascal 1. 2. 3. стартуем приложение, если оно уже запущено - открывается/активируется работающее и останавливается запускаемое. function IsRunPrg - у меня находится в отдельном модуле uUtils, в виде обычной функции без класса. константы естественно в модуле uConst ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 06:33 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
stells2, предложенный код будет работать, если на этот же компьютер зайти удаленно и запустить программу другим пользователем ? И если этот код будет работать при попытке запуска программы несколькими пользователями, то как вы будете активировать работающее приложение из другой сессии? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 08:26 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
goldmi45, Да, проверил. В одной сессии работает корректно. В разных - не "видит" запущенный экземпляр. Видимо, просто в API надо глубже залезть. :( Возможно, переключение контекста или еще что. Согласен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 11:52 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
stells2goldmi45, Да, проверил. В одной сессии работает корректно. В разных - не "видит" запущенный экземпляр. Видимо, просто в API надо глубже залезть. :( Возможно, переключение контекста или еще что. Согласен. Есть глобальный Mutex, а есть локальный.. решается префиксом On a server that is running Terminal Services, a named system mutex can have two levels of visibility. If its name begins with the prefix "Global\", the mutex is visible in all terminal server sessions. If its name begins with the prefix "Local\", the mutex is visible only in the terminal server session where it was created. In that case, a separate mutex with the same name can exist in each of the other terminal server sessions on the server. If you do not specify a prefix when you create a named mutex, it takes the prefix "Local\". Within a terminal server session, two mutexes whose names differ only by their prefixes are separate mutexes, and both are visible to all processes in the terminal server session. That is, the prefix names "Global\" and "Local\" describe the scope of the mutex name relative to terminal server sessions, not relative to processes. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 12:41 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
stells2, мьютекс надо делать именованным и с приставкой Global, тогда будет видно везде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 12:53 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
makhaonмьютекс надо делать именованным и с приставкой Global, тогда будет видно везде.Для создания глобального объекта может не хватить прав. По теме - открывается сокет на прослушку у все. Второй сокет уже не откроется, а по сокету можно еще и команду послать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 13:30 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
Да, видно :) Ладно, может кому пригодится. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 13:50 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_По теме - открывается сокет на прослушку у все. Второй сокет уже не откроется, а по сокету можно еще и команду послать Как вариант, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 13:52 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_,открывается сокет на прослушку и ...может не хватить прав ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 13:55 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
17.05.2018 13:50, stells2 пишет: Код: sql 1. ах, кАкая прЭлесть!!! Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 14:37 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
Это классика. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 14:39 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий, А что вы хотели, когда кому то надо показать что оно действительно таки труе? Ладно это еше паскаль, на С-подобных без жестких типов, там вообще многие в ступор входят, глядя на некоторые не объяснимые для них но такие простые вещи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 14:57 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
Javascript в этом плане особенно "хорош". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 14:59 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
По теме_Vasilisk_,открывается сокет на прослушку и ...может не хватить правПример в студию. С какой ошибкой отваливается bind на адрес 127.0.0.1? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 15:31 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_С какой ошибкой отваливается bind на адрес 127.0.0.1? Не знаю (в контексте прав). Но вот в случае, если кто-то уже поднял сервер на этом адресе, то подозреваю, что случится "Обычно разрешается одно использование адреса сокета (протокол/сетевой адрес/порт) (10048)" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 15:48 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_По теме - открывается сокет на прослушку у все. Второй сокет уже не откроется, а по сокету можно еще и команду послатьМожет и первый не открытся. Есть не нулевые шансы что данный сокет кто-то до вас уже открыл. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 15:55 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
YuRockНо вот в случае, если кто-то уже поднял сервер на этом адресе, то подозреваю, что случится "Обычно разрешается одно использование адреса сокета (протокол/сетевой адрес/порт) (10048)"Правильно. На этом и основана проверка уникальности. Наша задача - выбрать уникальный порт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 15:57 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_makhaonмьютекс надо делать именованным и с приставкой Global, тогда будет видно везде.Для создания глобального объекта может не хватить прав. SECURITY_DESCRIPTOR надо создать просто. Как вариант: Код: pascal 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 15:58 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Наша задача - выбрать уникальный порт Ну вообще да, порт можно и в настройки вынести. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 16:00 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
YuRockпорт можно и в настройки вынести. Обычно, так и делают, хотя - по топику, задача и так весьма специфична. И это явно не вариант домашней машинки. Честно говоря, в голову не приходит область применения, когда из разных сессий надо отслеживать. Есть примеры? А в одной сессии - так выше уже решения простые есть, и, даже активация работающего приложения. И тут уж действительно, может служба и проще? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 16:39 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
stells2И тут уж действительно, может служба и проще?Да, но так не интересно) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 16:42 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
YuRockДа, но так не интересно) Ради спортивного интереса - я только "ЗА" Лишний раз мозг наморщить - только плюсом к карме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 17:23 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
Второй этап - добиться переключения контекста, т.е. активации работающего приложения из другой сессии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 06:13 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
stells2Второй этап - добиться переключения контекста, т.е. активации работающего приложения из другой сессии.Это не возможно сделать по разным причинам, т.ч. можно не начинать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 08:33 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
YuRockstells2Второй этап - добиться переключения контекста, т.е. активации работающего приложения из другой сессии.Это не возможно сделать по разным причинам, т.ч. можно не начинать. Почему? Если оно будет активироваться для того пользователя, который его запустил - возможно :) Второй вариант: прибивать то с сохранением состояния и запускать новое для текущего пользователя с восстановлением состояния на момент закрытия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 10:09 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
alekcvp, Оба из этих прелестных варианта не решают задачу stells2Второй этап - добиться переключения контекста, т.е. активации работающего приложения из другой сессии. "работающего" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 10:24 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
YuRockSECURITY_DESCRIPTOR надо создать просто. Как вариант:Вот моя история борьбы с глобальными объектами. Там все не просто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 14:42 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Мне помог этот код 21417637 (для создания глобального Event. Может, не для всех объекта ядра так просто, но для Mutex думаю да) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 14:57 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Нельзя установить больше прав чем есть у владельца запускаемого процесс, иначе, смысл в этой всей "безопасности"? Любая программа, с точки зрения Windows ничем не отличается от пользователя который её запускает. Смешно было бы, если бы юзер с минимальными правами запускал системный самописный софт с админскими правами который позволял бы менять права у пользователя ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 17:18 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
stells2Нельзя установить больше прав чем есть у владельца запускаемого процессМожно. Windows различает текущие права и максимально возможные права. Так у процесса может быть какая-то привилегия, но она может быть неактивна. Подробнее AdjustTokenPrivileges ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 17:32 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Сейчас нет возможности проверить, а память уже потерлась малость :) Но, если при создании мьютекса использовать флаг 21417637 MUTEX_ALL_ACCESS - и запустить с минимальными правами пользователя? В том примере не очень понятно, под каким пользователем запускалось приложение. Допускаю, что права могут быть полными но только на порожденные объекты родительским процессом в рамках ACL, т.е. наследование и разрешения. Хотя, может для размещения в глобальном и допустимо. В общем, вопрос интересный, но требует проверки. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 18:06 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Любое приложение/процесс запускается изначально с правами пользователя его запустившего. И эти права повысить можно только обладая более высокими правами (если правильно обработать исключение, то будет выполнен запрос на повышение прав). Он может управлять только создаваемыми или наследуемыми объектами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 18:15 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Windows различает текущие права и максимально возможные права. Так у процесса может быть какая-то привилегия, но она может быть неактивна. Прочел еще раз - мы об одном и том же ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 18:16 |
|
||
|
Запретить запуск программы два раза
|
|||
|---|---|---|---|
|
#18+
stells2Любое приложение/процесс запускается изначально с правами пользователя его запустившегоДа. Но часть прав будет в состоянии Disabled, а части прав не будет вообще stells2И эти права повысить можно только обладая более высокими правамиНет. Disabled права можно перевести в Enabled. А вот при отсутствии прав уже сделать ничего нельзя, кроме как запуститься из под другого пользователя stells2будет выполнен запрос на повышение правНе всегда. Смотря что и как запрашивать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 21:37 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2040874]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
73ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 352ms |

| 0 / 0 |
