![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
Возможно ли такое? Записывать и читать произвольные данные в загрузочный модуль(exe)? Например PACMAN записывал в себя же таблицу результатов.
|
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Сам экзешник в себя ничего не запишет, т.к. заблокирован на время выполнения. А по сабжу, нужно искать подходящую библиотеку, в самом фреймворке такой функциональности нет.
-------------------- ![]() |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
В сам исполняемый модуль не удастся, однако средствами .NET в процессе выполнения экзешника возможно создать динамическую сборку, а потом сохранить её на диск. Допустим, сохранить в виде DLL, а при следующем запуске экзешника подгружать из неё какие-нибудь новые типы...
На этот счёт готов угостить своим примером кода, если потребуется ( просто, он не очень маленький Это сообщение отредактировал(а) marcusmae - 22.1.2007, 19:07 -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
Ммм, с DLL это тоже неочень подходит. Мне хотелось всё в одном файле собрать
|
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Elfet, могу сварганить пример, но будет с очень большими извращениями - как например создание нового EXE в temp-директории, выход из основного с запуском вспомогательного EXE, дожидающегося выхода из основного; подмена одного экзешника другим.
-------------------- ![]() |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
А кстати, может быть возможность Edit&Continue в VisualStudio как-то коррелирует с этой задачей? = Там наверно реализовано по типу так же : есть некоторый процесс, vshost, который хостит исполняемый модуль, может его остановить, отредактировать on-the-fly и тд.
Сам себя изменяет - думаю, это в принципе вряд ли возможно. Хотя, как показывает практика, с помощью абстракций любое чёткое правило можно поставить с ног на голову... Это сообщение отредактировал(а) marcusmae - 22.1.2007, 21:53 -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Ну в общем, так оно и реализовано. Есть hosting process, который загружает EXE и выполняет его (тот самый .vshost.exe), и в случае edit-and-continue происходит перезагрузка EXE с сохранением всех данных и последующей их загрузкой. -------------------- ![]() |
|||
|
||||
| Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
Да, нет |
|||
|
||||
| VectorMan |
|
|||
|
Antihero ![]() Профиль Группа: Участник Сообщений: 110 Регистрация: 9.4.2006 Репутация: нет Всего: 4 |
Как вариант, можно записывать данные в потоки ntfs исполняемого файла, но у такого подхода есть очевидные недостатки
|
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
так-так, а можно по-подробнее? -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| VectorMan |
|
|||
|
Antihero ![]() Профиль Группа: Участник Сообщений: 110 Регистрация: 9.4.2006 Репутация: нет Всего: 4 |
||||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
А, файловые потоки, понял, извиняюсь. Обрисую проблему в моём понимании. В целом, наверно, речь идёт не о топорной записи в исполняющийся .EXE, а 1) о динамическом дополнении кода 2) о быстром сохранении этих дополнений 3) о выгрузке более ненужных типов из памяти Первое сделать нетрудно, методы есть. Второе, третье и прелесть всей технологии упирается в необходимость привлекать жёсткие диски (неоднократные перезаписи + запуски нового варианта) - работать будет медленно. = Как это обойти? = Можно приделать виртуальный диск в виде маленького сервиса, работающего вместе с программой. Но хорошо бы этот виртуальный диск иметь в памяти, как это сделано, например, в никсовых Live-дистрибутивах. Только вот под Винду примеров таких решений почему-то не нашёл... -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| kurzon |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 307 Регистрация: 12.8.2007 Репутация: -8 Всего: -11 |
Пожалуста сваргань. Это сообщение отредактировал(а) kurzon - 7.10.2007, 17:54 |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |