Столкнулся (для себя) с такой проблемой, нужно временно запретить запуск определенных программ.
Для чего это нужно - для того, чтобы провести обновление этих программ без сбоев.
Скажете - "Так не запускай программу во время обновления." Тоже правильно но, программа сетевая, может бить запущена удаленным пользователем в терминальном режиме, что не есть гут!
Прошу помощи у профи, так как сам не могу понять куда копать. (неверное мозгов маловато или не те )
Схема работы такая:
1. Запускаю прогу обновления.
2. Запрещаю запуск этих определенных программ.
3. Обновляю эти самые программы.
4. Разрешаю запуск обновленных програм.
5. Завершаю работу проги обновления.
Моя схема "нарисована" и работает, не могу реализовать пункт 2 и 4.
Сама прогамма, НА УКРАИНСКОМ ЯЗЫКЕ http://sashaoli.narod.ru
Этот топик читают: Гость
Ответов: 824
Рейтинг: 138
|
|||
карма: 1 |
|
Ответов: 95
Рейтинг: 2
|
|||
может такой алгоритм
1. проверить, запущена ли программа 2. если запущена, отключить всех пользователей, закрыть программу 3. переименовать программу 4. обновляю... 5. возвращаю старое название программе |
|||
карма: 0 |
|
Разработчик
Ответов: 26155
Рейтинг: 2127
|
|||
Запрет запуска любых программ через реестр
Разрешить запуск приложений, кроме указанных в списке * HKEY_CURRENT_USERSOFTWAREMicrosoft WindowsCurrentVersonPoliciesExplorer DWORD DisallowRun, значение 1 - запрещает запуск приложений указанных в списке: HKCUSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorerDisallowRun Параметры типа STRING - список запрещенных приложений. "1" - "program.exe" "2" - "thebat.exe" "3" - "icq.exe" Пример файла реестра для запрещения запуска winword.exe Windows Registry Editor Version 5.00 [HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer] "DisallowRun"=dword:00000001 [HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorerDisallowRun] "1"="WINWORD.EXE" Для разрешения запуска надо просто удалить соответствующий ключ с номером |
|||
карма: 22 |
|
Ответов: 824
Рейтинг: 138
|
|||
Abracadabra писал(а): 2. если запущена, отключить всех пользователей, закрыть программу3. переименовать программу Такой алгоритм не подходит, так как принудительное отключение пользователей приведет к не сохранению результатов их работы, а программа, собственно, предназначена для подготовки и сдачи отчетов в налоговые органы. А бухи (бухгалтера) как всегда делают все в последнюю очередь (знаю, потому что сам бух) "Переименовать" - ни-ни, как она обновится если переименована. Даже если переименовать, то в процессе обновления запишется новый файл с изначальным именем (и не факт, что корректно пройдет обновление), при обратном переименовании возвратится старая версия файла. ------------ Дoбавленo в 13.35: nesco писал(а): Запрет запуска любых программ через реестрСпасибо, буду пробовать. А есть ли разница в этих ветках реестра для х64 и х32? |
|||
карма: 1 |
|
Разработчик
Ответов: 26155
Рейтинг: 2127
|
|||
sashaoli писал(а): А есть ли разница в этих ветках реестра для х64 и х32?Проверять надо. У меня, в Win7х32, ограничение работает. Если бы была х64, то проверил бы, но, увы... |
|||
карма: 22 |
|
Ответов: 824
Рейтинг: 138
|
|||
Прошу прощения за назойливость уважаемый nesco, есть "истчё" один вопрос.
Можно ли в указанном Вами методе прописать полный путь к программе, чтобы блокировать запуск программы по указанному пути Вот к чему я веду: На одном сервере может бить установлено несколько копий программы сдачи отчетности (или другой). И необходимо обновить только определенную копию, в то время как с другой копией пользователи свободно работают. Спасибо. |
|||
карма: 1 |
|
Разработчик
Ответов: 26155
Рейтинг: 2127
|
|||
sashaoli писал(а): Можно ли в указанном Вами методе прописать полный путь к программе, чтобы блокировать запуск программы по указанному путиНасколько я понял, то это блокировка запуска процесса вне зависимости от его расположения. Те невозможно будет запустить ни один процесс с таким именем, но запущенные процессы не удалятся из памяти, просто запрещен будет только запуск. Но в любом случае, при обновлении надо выгрузить из памяти процесс, файл которого ты собираешься обновить. Как ты собираешься это делать |
|||
карма: 22 |
|
Ответов: 824
Рейтинг: 138
|
|||
В данной ситуации все зависит от админа, как он выгонит юзеров из приложения.
Обновлялка останавливается если процесс (прога) запущен, чтобы не напортачить. Тут 3 варианта: 1. выгнать юзеров (проблемы админа) 2. запускать в ночное время, когда есть уверенность, что никто не работает (проблемы админа) 3. ждать завершения работы проги (выхода всех юзеров)(проверить занятость опред. файлов и т.п.), и только потом провести обновление. |
|||
карма: 1 |
|
Ответов: 952
Рейтинг: 4
|
|||
Прога обновляется автоматически или по вашему желанию?
Я у себя сделал проверку при запуске. Прога при запуске связывается с сервером, читает содержимое файла update.dat, сравнивает свою версию с версией (цифрами) из этого файла. Если требуется обновление - вылазит месага что прога будет закрыта и произойдет её обновление. Как-то так. Как вариант - чекать версию даже когда прога работает и в случае необходимости обновы - вывести месагу юзеру что мол сохраните и закройте - пройдет обновление. |
|||
карма: 0 |
|
Ответов: 824
Рейтинг: 138
|
|||
user_asm писал(а): Если требуется обновление - вылазит месага что прога будет закрыта и произойдет её обновлениеТо что Вы написали выполняется встроенными средствами самой программы. Но как то муторно, не так кабы многим хотелось. Разработчик фактически являться монополистом по данному продукту в Украине, конечно есть альтернативы, но увы предприятия предпочитают эту прогу (и я в частности тоже). В следствии (и к сожалению)чего разработчик не спешит удовлетворить все насущные проблемы админов, вот и появляются сторонние утилиты в помощь. Моя утилита написана и работает, я хочу ее улучшить. А для этого мне нужно исключить случайный запуск программы, в процессе обновления, юзером который в силу каких-то причин не увидел сообщения "Не запускай прогу, админ ее обновляет". ------------ Дoбавленo в 19.21: nesco писал(а): Запрет запуска любых программ через реестрЧто меня смущает: Предложенный Вами метод запретит запуск программ только для 1-го юзера, и неверное только текущего. И чтобы запретить запуск 10-и юзерам, нужно зайти под каждым и прописать эти настройки в реестре. Или я ошибаюсь? |
|||
карма: 1 |
|
Разработчик
Ответов: 26155
Рейтинг: 2127
|
|||
sashaoli писал(а): Или я ошибаюсь?Мне что-то подсказывает, что можно попытаться сделать то же самое, но с веткой HKLM, это тогда будет для всех пользователей |
|||
карма: 22 |
|
Ответов: 824
Рейтинг: 138
|
|||
nesco
Спасибо за поддержку и задание направления работы. Впереди два выходных, отчеты позади, вот и буду ваять |
|||
карма: 1 |
|
Ответов: 95
Рейтинг: 2
|
|||
а как лучше организовать запрет на запуск нескольких копий программы?
1. по запуску программы писать ключ в реестр, как в примере nesco? а по окончании удалять ключ? а если выход из программы будет аварийный и ключ не затрётся... 2. при старте проверять, нет ли уже запущенных процессов с таким наименованием? а если пользователь переименует исполняемый файл, как не дать запустить копию программы? |
|||
карма: 0 |
|
Ответов: 5446
Рейтинг: 323
|
|||
Abracadabra, Mutex
|
|||
карма: 1 |
|
Разработчик
Ответов: 26155
Рейтинг: 2127
|
|||
Abracadabra писал(а): а как лучше организовать запрет на запуск нескольких копий программы?Если своей, то использовать Mutex, там и пример есть. Для чужой проги ты не сделашь запрет, если переименуешь ее, и в ней самой не предусмотрено ограничение запускных копий |
|||
карма: 22 |
|