Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.02.22;
Скачать: [xml.tar.bz2];

Вниз

как корректно закрыть программу если отсоед родительский диск?   Найти похожие ветки 

 
happynewyear   (2009-01-09 19:25) [0]

Преветствую! вопрос в теме..


 
asail   (2009-01-09 19:57) [1]

Так-же, как и если не отсоед...

Например, MainForm.Close или Application.Terminate...


 
happynewyear   (2009-01-09 20:02) [2]

вот что получается
exception eexternal exception in modulу project1.exe at ....


 
asail   (2009-01-09 20:10) [3]

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


 
happynewyear   (2009-01-09 20:23) [4]

попробовал на чистом проэкте - ве норм...
похоже какой-то компонент себя так ведет...
буду рыть дальше..


 
Сергей М. ©   (2009-01-09 21:01) [5]


> родительский диск


Что за зверь ?


 
Leonid Troyanovsky ©   (2009-01-09 23:35) [6]


> Сергей М. ©   (09.01.09 21:01) [5]

> > родительский диск

> Что за зверь ?

Это предок всех существующих ныне дисков,
вымерший еще в доинтернетовские времена.

Вероятно, подразумевался его сакральный образ.

--
Regards, LVT.


 
Германн ©   (2009-01-10 00:57) [7]


> Leonid Troyanovsky ©   (09.01.09 23:35) [6]
>

Теперь, пожалуйста поясни что за зверь отсоед? Кто и/или что является его обычной пищей.


 
имя   (2009-01-10 22:55) [8]

Удалено модератором


 
antonn ©   (2009-01-10 22:59) [9]

отсоединен


 
имя   (2009-01-10 23:05) [10]

Удалено модератором


 
KSergey ©   (2009-01-11 10:52) [11]

> happynewyear   (09.01.09 20:23) [4]
> попробовал на чистом проэкте - ве норм...
> похоже какой-то компонент себя так ведет...

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


 
Медвежонок Пятачок ©   (2009-01-11 11:06) [12]

это мамин диск. или папин. родительский короче.


 
happynewyear   (2009-01-12 12:41) [13]

ценю чувство юмора выше высказавшихся :)

я где-то так и ожидал... :)

отсоед - это сокращенно ... anton шутить не стал....

просто длины темы не хватало на полные слова.

родительский диск - тут то же самое, что и label1.parent, например...
короче, тот диск с которого запустилось приложение в данном случае флешка, например...

ну пользователь может и дурак, но неужели вы всегда пользуетесь "безопасным извлечением устройства"?

я думаю, что не во всех 100% случаев

я вот задумал предусмотреть такую "оплошность", и приложение "смотрит" есть ли флешка и если нет, то завершает работу само...


 
Ega23 ©   (2009-01-12 12:46) [14]


> родительский диск - тут то же самое, что и label1.parent,
>  например...
> короче, тот диск с которого запустилось приложение в данном
> случае флешка, например...


Это не то же самое. Label1.Parent - это TWinControl, тогда как то, с чего запустилось приложение - это нечто физическое.


> но неужели вы всегда пользуетесь "безопасным извлечением
> устройства"?


Не поверишь - да. Не пользуюсь только в одном случае - когда комп выключен.


 
clickmaker ©   (2009-01-12 13:01) [15]

> и приложение "смотрит" есть ли флешка и если нет

Application.ExeName или ParamStr(0)
первый символ - буква диска.
Можно попробовать сделать его текущим или получить инфу о нем.
Если не получилось, то скорей всего его уже нет


 
happynewyear   (2009-01-12 13:05) [16]


> Это не то же самое. Label1.Parent - это TWinControl

ну это понятно ))))))))))))


 
happynewyear   (2009-01-12 13:08) [17]


> > но неужели вы всегда пользуетесь "безопасным извлечением
>
> > устройства"?
>
>
> Не поверишь - да. Не пользуюсь только в одном случае - когда
> комп выключен.


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


 
happynewyear   (2009-01-12 13:14) [18]


> clickmaker ©   (12.01.09 13:01) [15]
> > и приложение "смотрит" есть ли флешка и если нет
>
> Application.ExeName или ParamStr(0)
> первый символ - буква диска.
> Можно попробовать сделать его текущим или получить инфу
> о нем.
> Если не получилось, то скорей всего его уже нет


и в том и другом случае приложение покажет вам то, что вы ожидаете увидеть при присутствующем диске, но так и при отстутствующем...

я делаю так:
if not FileExists(Application.ExeName) then close;


 
Ega23 ©   (2009-01-12 13:21) [19]


> даже тогда, когда, например, ребенок (не знающий о вашем
> идеальном отношении к этому вопросу) подошел к компу и вытащил
> флеху?


Я если и вставляю флэшку в ноут, то только тогда, когда ребёнок уже спит.

Спор беспредметный. В чём вопрос-то?


 
antonn ©   (2009-01-12 13:28) [20]


> Ega23 ©   (12.01.09 13:21) [19]
>
>
> Спор беспредметный.

Это не спор беспредметный, это кто то не хочет внять доводам  оппонента :)


 
happynewyear   (2009-01-12 13:46) [21]

2 Ega23 ©

похоже вы хотите сказать, что как минимум этот вопрос вы контроллируете, как минимум на 100%

Жизнь покажет :)


 
Anatoly Podgoretsky ©   (2009-01-12 14:04) [22]


> то завершает работу само...

Здесь тоже длины не хватило?


 
happynewyear   (2009-01-12 14:10) [23]


> Anatoly Podgoretsky ©   (12.01.09 14:04) [22]
>
> > то завершает работу само...
>
> Здесь тоже длины не хватило?


p.s. приложение ... само ...

p.s.2 каждый бывает невнимателен, и вы тоже не исключение...

p.s.3 ну а троеточие - это троеточие :), может их много, но никто не идеален :)))


 
happynewyear   (2009-01-12 14:12) [24]


> Anatoly Podgoretsky ©   (12.01.09 14:04) [22]
>
> > то завершает работу само...
>
> Здесь тоже длины не хватило?


видимо считаете чтослово само не имеет право насуществование...
ок, лично для вас ...самостоятельно...


 
Anatoly Podgoretsky ©   (2009-01-12 14:38) [25]


> p.s.3 ну а троеточие - это троеточие :), может их много,
>  но никто не идеален :)))

Когда много - это многоточие.


 
happynewyear   (2009-01-12 14:46) [26]


> Когда много - это многоточие.


тут тонко подмечено :)


 
asail   (2009-01-12 15:21) [27]

А что мешает проге работать если флэшка, с которой она запущена вынута? Например, возьми calc.exe (тот что в windows\system32) скопируй на флэшку, запусти с нее, вынь флэшку. Работает как миленький...
Нафига прогу закрывать, если диск вынут?


 
antonn ©   (2009-01-12 15:33) [28]


> asail   (12.01.09 15:21) [27]

наверное по той же причине, почему нельзя удалить запущенную программу :)


 
clickmaker ©   (2009-01-12 15:38) [29]

> Работает как миленький

там ресурсов мало. он все их в память подгрузил и работает
а если ресурсов много, можно их по мере надобности с диска подгружать


 
happynewyear   (2009-01-12 15:40) [30]

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

вот для этого и мониторится сие действие.

приложение, что называется "Portable", и рассчитано для использования по большей части с флешки.

тот файл блокируется от удаления, хотя извратится можно, и удалить не смотря на блокировку, но проще вытащить флешку

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


 
Ega23 ©   (2009-01-12 15:58) [31]


> дело в том, что для работы проги нужен некий файл который
> лежит на этом же, пардон, "родительском диске", и к которому
> прога обращается через определенные промежутки времени,
> т.е. если его нет - то проге делать нечего - она должна
> закрыться...


try
 Открыть_Некий_Файл_Для_Работы;
except
 Завершить_Работу;
end;


 
Riply ©   (2009-01-12 16:07) [32]

> [27] asail   (12.01.09 15:21)
> А что мешает проге работать если флэшка, с которой она запущена вынута?
> Например, возьми calc.exe (тот что в windows\system32) скопируй на флэшку,
> запусти с нее, вынь флэшку. Работает как миленький...
> Нафига прогу закрывать, если диск вынут?

Не уверена, что exe-файл, всегда загружается в память целиком.
Если это так, то программе, в процессе работы, может потребоваться обращение к нему.


 
Ega23 ©   (2009-01-12 16:27) [33]


> Не уверена, что exe-файл, всегда загружается в память целиком.


Розыч нужОн. Саня, ау!!!


 
Германн ©   (2009-01-12 17:29) [34]


> Не уверена, что exe-файл, всегда загружается в память целиком.

В Windows же загрузчик читает лишь заголовок и таблицу импорта файла, а затем проецирует его на адресное пространство процесса так, будто бы файл является частью виртуальной памяти, хранящейся на диске. (Вообще-то, все происходит намного сложнее, но не будем вдаваться в подробности, не относящиеся к делу). Подкачка с диска происходит динамически - по мере обращения к соответствующим страницам памяти, причем загружаются только те из них, которые действительно нужны.            
  Например, если в текстовом редакторе есть модуль работы с таблицами, он не будет загружен с диска до тех пор, пока пользователь не захочет создать (или отобразить) свою таблицу. Причем неважно - находится ли этот модуль в динамической библиотеке или в основном файле! (Вот и попробуйте после этого сказать, что Windows глупые люди писали!) Загрузка таких "монстров", как Microsoft Visual Studio и Word, как бы "размазывается" во времени и к работе с приложением можно приступать практически сразу же после его запуска


(c) Крис Касперски


 
clickmaker ©   (2009-01-12 17:54) [35]

> которому прога обращается через определенные промежутки
> времени, т.е. если его нет - то проге делать нечего

тогда вообще непонятно, в чем проблема... сам же себе и ответил в [18]


 
asail   (2009-01-12 18:06) [36]


> Riply ©   (12.01.09 16:07) [32]

> Германн ©   (12.01.09 17:29) [34]

> clickmaker ©   (12.01.09 15:38) [29]

Все так! Тока я чего-то сомневаюсь, что здесь речь о чем-то типа Microsoft Visual Studio идет... :)
А, вообще, извратиться всегда можно. Было бы желание! Например, прога-загрузчик запускается с флэшки, копирует исполняемый файл с нее-же куда-либо, там запускает и отмирает... Флэшку можно смело отрубать... Прога работает! Нафига? Это уже не мне вопрос.


 
Leonid Troyanovsky ©   (2009-01-12 18:20) [37]


> Riply ©   (12.01.09 16:07) [32]

> Не уверена, что exe-файл, всегда загружается в память целиком.

Если он грузится с removable, то, для начала, копируется целиком в своп.
То же самое и с dll.

Попробуй, а детали можешь поискать у Д.Рихтера.
Для C есть, IMHO, и некий ключ для таких PE.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2009-01-12 19:04) [38]


> Ega23 ©   (12.01.09 13:21) [19]

> Я если и вставляю флэшку в ноут, то только тогда, когда
> ребёнок уже спит.

Если он уже спит, то в чем смысл вставления флешки?

Хотя может, конечно, там контент подходящий :)

--
Regards, LVT.


 
Riply ©   (2009-01-13 00:25) [39]

> [37] Leonid Troyanovsky ©   (12.01.09 18:20)

> Попробуй, а детали можешь поискать у Д.Рихтера.
> Для C есть, IMHO, и некий ключ для таких PE.

Спасибо.
P.S.
Т.к. заинтересовало, придется посмотреть :)


 
KSergey ©   (2009-01-13 05:37) [40]

> Riply ©   (12.01.09 16:07) [32]
> Не уверена, что exe-файл, всегда загружается в память целиком.
>
> Если это так, то программе, в процессе работы, может потребоваться  обращение к нему.

для дочитывания ресурсов, например, как уже говорилось.
Да и вообще exe-файл мапится на память, а не загружается в полном смысле этого слова, так что зависит от соотношения размеров выполняемой части exe и физ. памяти.



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.02.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.006 c
2-1231913756
031178
2009-01-14 09:15
2009.02.22
Автофильтр


1-1207887296
Fynjy84
2008-04-11 08:14
2009.02.22
Вызов в DLL функции основного приложения


15-1230284499
pasha_golub
2008-12-26 12:41
2009.02.22
Сколько весит экзешник пустого проекта в Д2009?


2-1231614795
Б
2009-01-10 22:13
2009.02.22
Как убрать зазубринки при поворе растра?


4-1206045437
i
2008-03-20 23:37
2009.02.22
Novell netware login name...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский