Вверх ↑
Этот топик читают: Гость
Ответов: 824
Рейтинг: 138
#1: 2013-02-22 12:47:24 ЛС | профиль | цитата
Столкнулся (для себя) с такой проблемой, нужно временно запретить запуск определенных программ.
Для чего это нужно - для того, чтобы провести обновление этих программ без сбоев.
Скажете - "Так не запускай программу во время обновления." Тоже правильно но, программа сетевая, может бить запущена удаленным пользователем в терминальном режиме, что не есть гут!
Прошу помощи у профи, так как сам не могу понять куда копать. (неверное мозгов маловато или не те )
Схема работы такая:
1. Запускаю прогу обновления.
2. Запрещаю запуск этих определенных программ.
3. Обновляю эти самые программы.
4. Разрешаю запуск обновленных програм.
5. Завершаю работу проги обновления.
Моя схема "нарисована" и работает, не могу реализовать пункт 2 и 4.
Сама прогамма, НА УКРАИНСКОМ ЯЗЫКЕ http://sashaoli.narod.ru
карма: 1

0
Ответов: 95
Рейтинг: 2
#2: 2013-02-22 13:17:34 ЛС | профиль | цитата
может такой алгоритм
1. проверить, запущена ли программа
2. если запущена, отключить всех пользователей, закрыть программу
3. переименовать программу
4. обновляю...
5. возвращаю старое название программе
карма: 0

0
Разработчик
Ответов: 26155
Рейтинг: 2127
#3: 2013-02-22 13:28:51 ЛС | профиль | цитата
Запрет запуска любых программ через реестр


Разрешить запуск приложений, кроме указанных в списке *
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

0
Ответов: 824
Рейтинг: 138
#4: 2013-02-22 13:35:59 ЛС | профиль | цитата
Abracadabra писал(а):
2. если запущена, отключить всех пользователей, закрыть программу
3. переименовать программу

Такой алгоритм не подходит, так как принудительное отключение пользователей приведет к не сохранению результатов их работы, а программа, собственно, предназначена для подготовки и сдачи отчетов в налоговые органы. А бухи (бухгалтера) как всегда делают все в последнюю очередь (знаю, потому что сам бух)
"Переименовать" - ни-ни, как она обновится если переименована. Даже если переименовать, то в процессе обновления запишется новый файл с изначальным именем (и не факт, что корректно пройдет обновление), при обратном переименовании возвратится старая версия файла.
------------ Дoбавленo в 13.35:
nesco писал(а):
Запрет запуска любых программ через реестр

Спасибо, буду пробовать.
А есть ли разница в этих ветках реестра для х64 и х32?
карма: 1

0
Разработчик
Ответов: 26155
Рейтинг: 2127
#5: 2013-02-22 13:45:58 ЛС | профиль | цитата
sashaoli писал(а):
А есть ли разница в этих ветках реестра для х64 и х32?

Проверять надо. У меня, в Win7х32, ограничение работает. Если бы была х64, то проверил бы, но, увы...
карма: 22

0
Ответов: 824
Рейтинг: 138
#6: 2013-02-22 14:32:47 ЛС | профиль | цитата
Прошу прощения за назойливость уважаемый nesco, есть "истчё" один вопрос.
Можно ли в указанном Вами методе прописать полный путь к программе, чтобы блокировать запуск программы по указанному пути
Вот к чему я веду:
На одном сервере может бить установлено несколько копий программы сдачи отчетности (или другой).
И необходимо обновить только определенную копию, в то время как с другой копией пользователи свободно работают.
Спасибо.

карма: 1

0
Разработчик
Ответов: 26155
Рейтинг: 2127
#7: 2013-02-22 14:39:33 ЛС | профиль | цитата
sashaoli писал(а):
Можно ли в указанном Вами методе прописать полный путь к программе, чтобы блокировать запуск программы по указанному пути

Насколько я понял, то это блокировка запуска процесса вне зависимости от его расположения. Те невозможно будет запустить ни один процесс с таким именем, но запущенные процессы не удалятся из памяти, просто запрещен будет только запуск. Но в любом случае, при обновлении надо выгрузить из памяти процесс, файл которого ты собираешься обновить. Как ты собираешься это делать
карма: 22

0
Ответов: 824
Рейтинг: 138
#8: 2013-02-22 14:58:03 ЛС | профиль | цитата
В данной ситуации все зависит от админа, как он выгонит юзеров из приложения.
Обновлялка останавливается если процесс (прога) запущен, чтобы не напортачить.
Тут 3 варианта:
1. выгнать юзеров (проблемы админа)
2. запускать в ночное время, когда есть уверенность, что никто не работает (проблемы админа)
3. ждать завершения работы проги (выхода всех юзеров)(проверить занятость опред. файлов и т.п.), и только потом провести обновление.
карма: 1

0
Ответов: 952
Рейтинг: 4
#9: 2013-02-22 18:46:34 ЛС | профиль | цитата
Прога обновляется автоматически или по вашему желанию?
Я у себя сделал проверку при запуске. Прога при запуске связывается с сервером, читает содержимое файла update.dat, сравнивает свою версию с версией (цифрами) из этого файла.
Если требуется обновление - вылазит месага что прога будет закрыта и произойдет её обновление.
Как-то так.
Как вариант - чекать версию даже когда прога работает и в случае необходимости обновы - вывести месагу юзеру что мол сохраните и закройте - пройдет обновление.
карма: 0

0
Ответов: 824
Рейтинг: 138
#10: 2013-02-22 19:21:30 ЛС | профиль | цитата
user_asm писал(а):
Если требуется обновление - вылазит месага что прога будет закрыта и произойдет её обновление

То что Вы написали выполняется встроенными средствами самой программы. Но как то муторно, не так кабы многим хотелось.
Разработчик фактически являться монополистом по данному продукту в Украине, конечно есть альтернативы, но увы предприятия предпочитают эту прогу (и я в частности тоже). В следствии (и к сожалению)чего разработчик не спешит удовлетворить все насущные проблемы админов, вот и появляются сторонние утилиты в помощь.
Моя утилита написана и работает, я хочу ее улучшить. А для этого мне нужно исключить случайный запуск программы, в процессе обновления, юзером который в силу каких-то причин не увидел сообщения "Не запускай прогу, админ ее обновляет".

------------ Дoбавленo в 19.21:
nesco писал(а):
Запрет запуска любых программ через реестр

Что меня смущает:
Предложенный Вами метод запретит запуск программ только для 1-го юзера, и неверное только текущего.
И чтобы запретить запуск 10-и юзерам, нужно зайти под каждым и прописать эти настройки в реестре.

Или я ошибаюсь?
карма: 1

0
Разработчик
Ответов: 26155
Рейтинг: 2127
#11: 2013-02-22 21:46:22 ЛС | профиль | цитата
sashaoli писал(а):
Или я ошибаюсь?

Мне что-то подсказывает, что можно попытаться сделать то же самое, но с веткой HKLM, это тогда будет для всех пользователей
карма: 22

0
Ответов: 824
Рейтинг: 138
#12: 2013-02-22 22:24:35 ЛС | профиль | цитата
nesco
Спасибо за поддержку и задание направления работы.
Впереди два выходных, отчеты позади, вот и буду ваять
карма: 1

0
Ответов: 95
Рейтинг: 2
#13: 2013-02-25 15:29:34 ЛС | профиль | цитата
а как лучше организовать запрет на запуск нескольких копий программы?
1. по запуску программы писать ключ в реестр, как в примере nesco? а по окончании удалять ключ? а если выход из программы будет аварийный и ключ не затрётся...
2. при старте проверять, нет ли уже запущенных процессов с таким наименованием? а если пользователь переименует исполняемый файл, как не дать запустить копию программы?
карма: 0

0
Ответов: 5446
Рейтинг: 323
#14: 2013-02-25 15:33:03 ЛС | профиль | цитата
Abracadabra, Mutex
карма: 1

0
Разработчик
Ответов: 26155
Рейтинг: 2127
#15: 2013-02-25 15:35:56 ЛС | профиль | цитата
Abracadabra писал(а):
а как лучше организовать запрет на запуск нескольких копий программы?

Если своей, то использовать Mutex, там и пример есть. Для чужой проги ты не сделашь запрет, если переименуешь ее, и в ней самой не предусмотрено ограничение запускных копий
карма: 22

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)