|
|
|
| Создал программу в VB. Выложил на сервер. Если у кого запущена- не возможно обновить версию (не разрешает заменить пока юзер не отпустит).
Как избежать этого?
ИЛИ БОЛЕЕ КОНКРЕТНЫЙ ВОПРОС:
КАК СДЕЛАТЬ КНОПКУ ЗАКРЫТЬ КОПИЮ ПРГРАММЫ НА ВСЕХ КОМПЬЮТЕРАХ?
Спасибо.
p.s. где-то недавно на сервере видел подобное сообщение и по-моему было какое-то решение, но я не смог найти. Рыскал часа два- глухо ((( | |
|
| |
|
|
|
| имхо
1. выкладывать стоит версию (релиз), которую не предполагается менять. разве что юзеры попросят изменить функционал.
2. а зачем запускать прогу с сервера? не проще с каждой рабочей станции | |
|
| |
|
|
|
| ДрЮня
Все конечно хорошо. Обрисую ситуацию:
Я написал программку (exe), работающую по заданному алгоритму (без баз и т.п.).
Далее, мои коллеги (проектировщики) тоже захотели ее юзать. Выложил на наш центральный сервер. Всем доступна и все пользуют последнюю версию ))
Дальше, захотели пользовать ее конструктора. Им тоже дал ярлык.
Далее посыпались предложения: доработать то и это...
А ВОТ ЗАМЕНИТЬ ФАЙЛ, ПОКА ОН У КОГО-ТО ЗАПУЩЕН НЕ ПОЛУЧАЕТСЯ.
Другими словами, пока все не закроют программу- файл не заменить на новый.
Вот и придумал: было бы не кисло запустив этот-же файл послать ВСЕМ запущенным процессам программы команду - сообщение, что получена команда выключения программы. И выгрузить ее.
Далее, я меняю, а пользователь как спохватится- снова запустит уже новую версию )) | |
|
| |
|
|
|
| опять имхо
мне кажется - это плохая идея, менять что-то "тихой сапой", не ставя при этом ползователя в известность.
я не знаю, что делает Ваша программа, но она, например, может работать с файлом или БД, в таком случае конечный пользовательможет потерять информацию.
обычное правило - как админы - посылается оповещение, что с такого-то времени по такое-то определенный сервис будет не доступен.
далее дело пользователя - если он его использует, то виноват сам, если что-то себе попортит.
так и нужно сделать - послать всем юзерам оповещение, что будет произведена замена версии. | |
|
| |
|
|
|
| хорошо. согласен.
А КАК МНЕ ЭТОТ ФАЙЛ ЗАМЕНИТЬ-ТО??????????
Бежать в соседний корпус и проверять, у кого он запущен? Как?
Как выгрузить из памяти всех компов все копии данной программы?
Я не могу заменить- пишет, что файл используется... | |
|
| |
|
|
|
| еще разок -
2. а зачем запускать прогу с сервера? не проще с каждой рабочей станции | |
|
| |
|
|
|
| Развивая предложение ДрЮня.
У каждого локально дожна стоять программа. И на сервере тоже. Но на сервере - образец.
В программе должена иметься и доступна для программного чтения версия программы.
Любая локальная программа при запуске сверяет свою версию с версией сервера.
Если они не совпадают, то локальная программа заменяет себя на образец с сервера.
Таким образом можно сделать обновление, никого не трогая. Или даже откатиться назад, при обнаружении критических ошибок в новой версии - достаточно на сервер положить старую версию.
Собственно я описываю то, что сам уже сделал.
Претензий за последнее тысячелетие не было. Удобно всем.
Естественно, перед заменой релиза на сервере делается общее предупреждение.
Его можно реализовать по разному. У меня это делает все таже программа по команде админа. | |
|
| |
|
26 Кб. |
|
| Я при такой проблеме пошел следующим путем. Написал прогу - которой в качестве параметра передается имя проги которую следует запустить - она создает экземпляр проги и уже его запускает - дсотаточно эфективно и просто . Получается что оригинал программы никогда не занят -а когда я чтото обновлю я просто говорю пользователям выйти и зайти снова. пример запуска c:\ load.exe zarplata.mde . Прогу прилагаю | |
|
| |
|
|
|
| ДрЮня
Q: еще разок - 2. а зачем запускать прогу с сервера? не проще с каждой рабочей станции
A: для того, чтобы пользователи пользовались новой версией. у меня бывает до 5 обновлений в день))) то мелочи добавляю, то исправляю действия по ошибке (той или иной). а юзеры хотят сразу же исправленную версию.
Относительно предложения Ю.Ш.
Уважаемый Юрий! Ваше предложение довольно интересное, но есть одно но: На каждой машине необходимо устанавливать программу что может не корректно быть, если пользователь ограничен в правах для установки программ. Или Вы имели ввиду простое копирование? Так или иначе программа будет иметь кучу своих копий в системе предприятия, что наверное не очень хорошо, так ведь? Однако, Спасибо за ваше предложение )))
ylhtqrf ака Андрейка )))
Спасибо за наводку. Это именно то, что надо. По моему это лучший выход.
..мысли:
относительно начального вопроса темы: ..Но не плохо было бы иметь возможность "удалееной выгрузки программы" для более гибкой системы администрирования... но это уже похоже из сюжета: это не возможно.
т.к. не представляется возможным управлять компьютером пользователя.. хотя, если запущен экземпляр на машине юзера, то при определенном действии можно проверять на сервере наличие определенного файла с определенным ключом в теле. если так, то выгружать программу.
но и этот вариант не годится, т.к таймер встраивать не желательно (на действие проверки), а если по действию какому- то конкретному (нажатие кнопки)- то может случиться так: пользователь запустит программу и смоется в цех на пол дня... или в столовую... или банально домой (((.... Выхода нет. Отказываюсь от этой идеи дистанционной выгрузки программы...
Относительно новых предложений участников:
В общем, ylhtqrf - ваша версия наиболее действенна ))))
Моя версия выхода из ситуации: взять идею ylhtqrf в виде идеи Ю.Ш.
Итак, о тонкостях: Проще наверное в самой программе создать функцию- запуск локальной копии, ну что то вроде RunWithCopy ()
Первыми строками данной функции будет узнать откуда запущена программа (параметр app.path). Если из сети (первые два символа - \\), то продолжаем, если нет- окончание функции.
Далее, в папке %Temp% создаем копию данной программы с тихой заменой, проверяем в цикле на пять секунд при отработке через каждые полсекунды, что файл существует и что он не ReadOnly, если упешно- запускаем ТУ копию и выходим из текущей. ВСЕ.
Преимущества, как я их вижу: Оригинальный файл будет занят только 1 секунду при запуске (приблизительно). На медленных машинах- подольше малость (время создания локальной копии).
Недостатки: Не возможно будет очистить системный диск вместе с папкой темп при запущенной программе. Но тогда в этом случае вместо переменной %temp% можно использовать переменную %userappdata%, в этом случае по идее не должно быть ошибки при копировании, если у юзера права юзеров а не админов машины )).
Спасибо всем )))))
Приступаю к осуществлению ...
P.S. Ну конечно же, уважаемые участники, мне хотелось бы узнать ваши мнения.
Как вам идея? | |
|
| |
|
|
|
| Для fylhtqrf
Вы преложили один из способов копировки на локальный комп.
Я их не описывал. Для меня ваш ваш способ не пригоден по многим причинам.
Одна из них: прога весит 160 Мб. Копировка с сервера при запуске превращает запуск в довольно утомительное занятие.
Для akkorn
Так или иначе программа будет иметь кучу своих копий в системе предприятия, что наверное не очень хорошо, так ведь?
Не так. Вы имеете на каждом компе Асс вместе с остальным мелкософтовским хозяйством и не очень страдаете.
А учет версий, применяемый во всех распространяемых программах, совершенно необходим.
Доказывать не буду.
В рамках одной организации его можно не делать, но я бы сделал его хотя бы для себя - можно элементарно забыть, какой релиз стоит сейчас на сервере, особенно, если обновления делаются часто. Определять релиз по тексту или особенностям работы - обременительное занятие. Вы фактически держите версию программы в голове. А это может подвести.
А при необходимости вмешательства других сотрудников в замену релизов, вы ставите их в очень трудную ситуацию. Ведь в жизни случается многое, не предвиденное, и не очень приятное.
Удачи! | |
|
| |
|
|
|
| Ю.Ш.
Спасибо за наводку на умные мысли )))
Но как понять вашу фразу:
> Если они не совпадают, то локальная программа заменяет себя на образец с сервера
? Ведь вы же говорите, что размер базы 160 мегов. ??
А по поводу версий программы- я ни чего про них не говорил. Упустил обмолвиться..
Исправляюсь: Конечно же у меня каждая версия программы имеет свой номер.
В VB нумерация происходит автоматически при компиляции, в АСС я высталяю номер вручную. Номера выводятся в надписи на главной форме, что-то вроде ver 1.2.39.
Вы не использовали мою программу для Access для защиты от клавиши Shift при запуске?
http://hiprog.com/index.php?option=com_content&task=view&id=251661574&Itemid=35
Буду обдумывать все варианты. ))) | |
|
| |
|
|
|
| Но как понять вашу фразу:
> Если они не совпадают, то локальная программа заменяет себя на образец с сервера
? Ведь вы же говорите, что размер базы 160 мегов. ??
Так она и не загружается каждый раз при запуске, а только при обновлении.
Потому, что постоянно хранится на локальном компе.
А обновления у меня не каждый день.
Вы не использовали мою программу для Access для защиты от клавиши Shift при запуске?
Я использую http://hiprog.com/index.php?option=com_content&task=view&id=361&Itemid=35 | |
|
| |
|
|
|
| а я собираю все предложения и замечания к программе от юзеров, вношу в исходник все коррективы, приглашаю на просмотр внесшего предложение и потом, после 6 вечера, а то и после 7-ми, когда никого нет в офисе делаю замену. Ну а если что-то уж слишком критичное, то прошу выйти того или иного юзера и делаю замену. | |
|
| |
|
|
|
| Скорп
Верно. При возможности покидать работу в любое время, а также при малых кол-вах пользователей этот прием не вызывает даже обсуждения.
У меня же нет возможности оставаться после смены ((
Спасибо за совет )) | |
|
| |