Как сделать так, чтобы...
чтобы экзэшник после запуска не занимал свой файл на диске... ну чтобы программу после запуска можно было бы свободно удалить? А то есть программка, которую все запускают по сетке, чтобы ее обновить приходится всех от нее отцеплять...
Ну, брат, ты фокусник...
Ну, брат, ты фокусник...
Ну а что? Вот допустим ее запустило 20 человек, я спокойно захожу на сервер и всех от нее отрубаю. Причем программка не обращается к своему телу больше и продолжает нормально работать, ибо незачем ей себя блокировать, запустилась и хватит... неужели такое не возможно?
Ну а что? Вот допустим ее запустило 20 человек, я спокойно захожу на сервер и всех от нее отрубаю. Причем программка не обращается к своему телу больше и продолжает нормально работать, ибо незачем ей себя блокировать, запустилась и хватит... неужели такое не возможно?
Ох, сомнения меня одолевают. Каким образом реализована работа с клиентскими машинами. Каждый пользователь запускает локальный процесс? Или процесс серверный, клиенты только подключаются?
Программа стартует, видит, что она запущена в первом экземпляре, копирует свой файл в другой, запускает свою копию из этого файла, ждёт её старта и завершается.
Вторая копия видит, что она вторая, и всех этих действий не выполняет.
Никакого шаманства.
Нет никаких проблем.
Программа стартует, видит, что она запущена в первом экземпляре, копирует свой файл в другой, запускает свою копию из этого файла, ждёт её старта и завершается.
Вторая копия видит, что она вторая, и всех этих действий не выполняет.
Никакого шаманства.
А теперь следующий поворот событий. Программа создала свою копию во временной директории на сервере, запустила вторичный процесс и вырубила первичный все подключенные клиенты должны провести реконнект - иначе отлуп. Если процесс создается на локальных машинах пользователей, то те, кто еще не запусктил ее - и не запустят нихрена, потому как файла по указанному пути уже нет.
А теперь следующий поворот событий. Программа создала свою копию во временной директории на сервере, запустила вторичный процесс и вырубила первичный все подключенные клиенты должны провести реконнект - иначе отлуп. Если процесс создается на локальных машинах пользователей, то те, кто еще не запусктил ее - и не запустят нихрена, потому как файла по указанному пути уже нет.
Никаких проблем.
Делаем крохотный фиксированный "переходник" (не изменяемый, не обновляемый и не удаляемый), который и запускает основную программу. Сведения о текущем местоположении основной программы можно хранить в реестре. В общем, такой своеобразный "миниСОМ" и "миниRPC" :)
В общем, основополагающая идея - множественные уровни опосредования и каскадное делегирование...
Никаких проблем.
Делаем крохотный фиксированный "переходник" (не изменяемый, не обновляемый и не удаляемый), который и запускает основную программу. Сведения о текущем местоположении основной программы можно хранить в реестре. В общем, такой своеобразный "миниСОМ" и "миниRPC" :)
В общем, основополагающая идея - множественные уровни опосредования и каскадное делегирование...
А лисапед-то какой, с колесами от КАМАЗа:D
А лисапед-то какой, с колесами от КАМАЗа:D
Это что? Закос под иронию? :)
Так напрасно. Метод простой, не громоздкий, и вполне работоспособный. :)
Это что? Закос под иронию? :)
Так напрасно. Метод простой, не громоздкий, и вполне работоспособный. :)
я так и непонял ничего. в похожей ситуации кинул в эту папку файл readme.txt, где написано скачивайте последнюю версию. и когда мне нужно обновить прогу я к названию файла приплюсовываю номер версии и выкладываю рядом. а как только старая никем не запущена, то удаляю.
Ведь если подумать - при закрытии экзешника операционная система освобождает файл, так почему бы не сделать это немного раньше?
Ну, сам посуди:
Вот освободил ты файл после старта процесса, чья-то шкодливая рука его перенесла или грохнула. И в этот момент приложение затребовало какой-нибудь ресурс.... BSOD'ов давно не ловили? Получите на всю катушку!
Ну, сам посуди:
Вот освободил ты файл после старта процесса, чья-то шкодливая рука его перенесла или грохнула. И в этот момент приложение затребовало какой-нибудь ресурс.... BSOD'ов давно не ловили? Получите на всю катушку!
Чего такое BSOD??? Я так понимаю, к своему телу приложение больше не обращается, а если ресурс - это не его тело, то оно его получит по требованию, разве не так?
Чего такое BSOD??? Я так понимаю, к своему телу приложение больше не обращается, а если ресурс - это не его тело, то оно его получит по требованию, разве не так?
BSOD - Blue Screen Of Death.
Программа не загружается в память вся без остатка, ибо нефиг. Поэтому файл остается открытым.
BSOD - Blue Screen Of Death.
Программа не загружается в память вся без остатка, ибо нефиг. Поэтому файл остается открытым.
А че это она не загружается? Моя загружается вся....
А че это она не загружается? Моя загружается вся....
Эх ты, святая простота... :D :D :D :D
Ресурсы могут храниться (и, как правило, хранятся) в том же файле, что и код. И ОС, чтобы не строить работу на зыбкой почве предположений, логично и безусловно блокирует екзешник во избежание подобного рода проблем.
Эх ты, святая простота... :D :D :D :D
Ресурсы могут храниться (и, как правило, хранятся) в том же файле, что и код. И ОС, чтобы не строить работу на зыбкой почве предположений, логично и безусловно блокирует екзешник во избежание подобного рода проблем.
Я понимаю, что программка не вся грузится обычно, но моя загружается сразу со всеми ресурсами... поэтому грузится вся :-) Так есть возможность освободить файл до закрытия, или нет? :-)
Я понимаю, что программка не вся грузится обычно, но моя загружается сразу со всеми ресурсами... поэтому грузится вся :-) Так есть возможность освободить файл до закрытия, или нет? :-)
Это ты знаешь, что вся. Вернее, предполагаешь, точного знания в этом вопросе не может быть по определению, т.к. ты не Бог всемогущий и не создатель ОСи :)