Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> обрушение программы при выдергивании флешки, если программа выполняется с флешки 
:(
    Опции темы
tensor
Дата 17.8.2008, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 17.8.2008

Репутация: нет
Всего: нет



Приветствую, коллеги.
Пишу так называемый portable application.

При вставке флешки приложение запускается через autoplay/autorun и работает с данными на ней. Однако, есть вероятность, что флешку выдернут во время работы программы и программа обрушится. В ходе натурных экспериментов такое поведение понаблюдал.

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

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

Соответсвенно одним из путей решения может быть принудительная загрузка всего exe в память. Как это можно сделать?

Второй путь - запуск процесса из "памяти", т.е. без соответствующего физического файла в фаловой системе. Такое вообще возможно? Временный файл не подойдет, т.к. при одно из требований - чтобы программа не могла остаться в файловой системе компьютера ни при каких условиях.

Нужно, чтобы работало в Windows XP(2003) и Vista (2008). Опционально в Windows 2000.

Может кто статейки встречал на эту тему? Нагуглить ничего дельного не удалось.
PM MAIL   Вверх
Sartorius
Дата 17.8.2008, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 1
Всего: 37



Цитата(tensor @  17.8.2008,  22:02 Найти цитируемый пост)
 при выдергивании флешки, страница с кодом или данными может не оказаться загруженной в физическую память, и при обращении к ней происходит сбой доступа и программа падает.

 ИМХО проблема в подгрузке ресурсов, если у тебя своп не на флешке и не 64 Мб RAM  smile  Покажи ошибку/участок исходника, где падает. 

Это сообщение отредактировал(а) Sartorius - 17.8.2008, 21:13
PM MAIL ICQ   Вверх
tensor
Дата 17.8.2008, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 17.8.2008

Репутация: нет
Всего: нет



Падает в разных местах, причем иногда падает, иногда нет, отладчик еще не цеплял, завтра на работе более детально посмотрю.

Вот про 64 RAM  это дельная подсказка, надо будет вирталку сделать и более детально посмотреть в каких местах оно спотыкается.

Может есть какие методы чтобы в PE файле выставить флаги, чтобы весь exe грузился в память вместе с ресурсами?


PM MAIL   Вверх
Sartorius
Дата 17.8.2008, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 1
Всего: 37



Цитата(tensor @  17.8.2008,  22:23 Найти цитируемый пост)
чтобы весь exe грузился в память вместе с ресурсами?

А зачем? Тебе же надо 
Цитата(tensor @  17.8.2008,  22:02 Найти цитируемый пост)
чтобы программа выдала пользователю сообщение с претензией, какой он нехороший, и если пользователь обратно не вставит флешку, то спокойно выйти


http://www.delphikingdom.com/asp/answer.asp?IDAnswer=64533
лови отключение устройства:


Это сообщение отредактировал(а) Sartorius - 17.8.2008, 21:28
PM MAIL ICQ   Вверх
jonie
Дата 17.8.2008, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



может имеет смысл делать мелкий загрузчик, который всю программу скопирует на жеский и впоследсвии будет всё что нужно тянуть оттуда?...
т.к. отследить момент вытаскивания флешки впринципе нельзя - вы узнаете о нем слишком поздно, чтобы чтото сделать.. тем более неизвестно как себя ведет винда с процессами...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
SergeCpp
Дата 18.8.2008, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


Профиль
Группа: Участник
Сообщений: 955
Регистрация: 8.8.2005
Где: At Home

Репутация: 10
Всего: 124



Visual C++ Linker Options
/SWAPRUN (Load Linker Output to Swap File)

Насчёт флэшки не уверен, но пишут ведь:
Цитата
When CD is specified, the operating system will copy the image on a removable disk to a page file and then load it.


PM MAIL WWW ICQ   Вверх
tensor
Дата 18.8.2008, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 17.8.2008

Репутация: нет
Всего: нет



Похоже, это то что мне надо.

Еще есть editbin с такой же опцией.

Однако надо будет потестить и с отключенным swap файлом, как оно будет себя вести.
PM MAIL   Вверх
tensor
Дата 18.8.2008, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 17.8.2008

Репутация: нет
Всего: нет



Еще можно пройтись по всем страницам в PE и записать туда чего-нибудь, подробнее здесь
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0835 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.