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

Вниз

Странная ситуация с файлом   Найти похожие ветки 

 
Teren   (2004-01-02 18:01) [0]

Нашел тут среди своих старых разработок файлик file.exe

Хочу его стереть - бах, винда говорит, что стереть fail нельзя - нет доступа. Зато переименовать файл влегкую!!! Как это понимать?
Если уж файл нельзя стереть - то его и переименовать нельзя, по идее?

Причем, тот переименованный файл опять же стереть нельзя!

Но дальше вообще копец! Оказывается файл можно вырезать и вставить! То есть, переместить. И операция проходит на ура... но вот просто удалить нельзя. Это не странно разве?


 
SPeller   (2004-01-02 18:07) [1]

Мож не так удаляешь?


 
ISP   (2004-01-02 18:37) [2]

Диск просканируй, тут явная ошибка на диске.


 
Teren   (2004-01-02 20:01) [3]

>Мож не так удаляешь?

это как это? Как в проводнике можно не так удалять? :)

А в чем дело я разобрался. То есть, немного разобрался.

Оказывается, перед тем как удалить я эту программу запускал. А она на WinApi написана, немного некорректно обрабатывает WM_CLOSE, форма исчезает, но сам процесс еще жив. Он показывается в диспетчере задач. Поэтому файл и не удалялся, потому как процесс этого файла был запущен. Тут все ясно!

Но блин, почему тогда этот файл можно переименовать было? И тем более файл можно переместить!!! Можно переименовать файл в file.txt - а процесс все равно живет!

P.S. Блин, тут вообще такую вещь обнаружил. Оказывается так со всеми EXE"шниками! То есть, можно запустить любой EXE"шник, после чего этот EXE"шник переименовывать, перемещать, только удалять нельзя!!! Разве это правильно? Я всегда думал, что пока процесс жив с EXE"шником нельзя ничего делать... черт побери, а интересно, функция application.exefile будет возвращать разные значения, если exe"шник перемещать... надо попробовать...


 
Teren   (2004-01-02 20:06) [4]

не... application.exename возвращает всегда одно и тоже имя файла... хотя такого файла уже и не существует :)


 
Stilgar   (2004-01-02 20:11) [5]

Ну bat-файлами удалять екзешник можно (по крайней мере под 98-ой). И процесс ничего, работает. А это ты нашел одну из XP-шных ошибок. Кстати, вторая: можно удалить зарегестрированный COM-сервер (в прошлых версиях было нельзя, и правильно).


 
Teren   (2004-01-02 20:15) [6]

1) У меня W2k
2) А как же так... как же так... неужели и вправду можно переименовать EXE"шник во время работы процесса?


 
Stilgar   (2004-01-02 20:24) [7]

На 2k нельзя, проверял.
У кого 98-ой, проверте, please, а то сильно интересно.


 
Ihor Osov'yak   (2004-01-02 20:27) [8]

2 [6] Teren (02.01.04 20:15)

Для NT можно, для W9x - нет.


 
Undert   (2004-01-02 20:43) [9]

Это из за NTFS!
У меня такая же фишка была - установил пакет ПО для сканнера - все иконки как будто файлов нету, иду к файлам - ничего не могу с ними сделать, но могу переименовывать даже в другие папки, так я их переименовал в папку temp в Windows.


 
Teren   (2004-01-02 22:48) [10]

У меня FAT32!

>Ihor Osov"yak © (02.01.04 20:27) [8]

а это нормальное поведение?! Почему же тогда нельзя файл просто удалить?


 
Undert   (2004-01-02 23:27) [11]


> Teren (02.01.04 22:48) [10]


Значит у тя что-то с руками, т.к. FAT32 даже под Windой FAT32 и с него что либо удалить не составляет проблем.


 
Teren   (2004-01-03 00:56) [12]

Undert © (02.01.04 23:27) [11]

ага, попробуй удалить EXE"шник процесса, когда тот запущен. Посмотрю как у тебя получится...


 
Undert   (2004-01-03 01:06) [13]


> Teren (03.01.04 00:56) [12]


Когда я немогу удалить еэзешник процесса который запущен я давлю CTRL ALT DELETE и наф*г выгружаю процесс и мочу файл. Сложно?


 
redacid   (2004-01-03 04:08) [14]

2Teren
у меня несколько ХДД есть NTFS и FAT32
можно спокойно переименовывать и там и там при запущеном приложении. Я уже с таким встечался только с ДЛЛями. Пришел к мнению что запущеный процесс работает с файлом не по его названию а по какому-то другому идентификатору и перемещять его можно ведь при перемещении файл на самом деле никуда не переноситься а просто меняется его логическое расположение в файловой системе(вы никогда не замечали что файлы в прелелах одного логического диска переносятся гораздо быстрее чем копируются)


 
Gero   (2004-01-03 07:30) [15]

> Teren

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


 
OlDemon   (2004-01-03 10:50) [16]

2 Gero>
А прочитать все сообщения сложно?? Написано же что у него Фат32.


 
Holy   (2004-01-03 11:20) [17]

W2k SP3 FAT32 Специально попробовал. Запущенный экзешник переименовывается. Где-то слышал, что это вполне нормально, т.к. винда подправит ссылки (не знаю как правильно) и все опять станет на свое место с учетом нового имени.


 
Teren   (2004-01-03 14:00) [18]

А вот и не фига. Тогда по идее Application.exename должен возвращать новое местоположение файла, а оно возвращает старое, такого файла даже не существует! Возможно, это недоработка Борланда...


 
jack128   (2004-01-03 14:10) [19]


> Возможно, это недоработка Борланда...
Если это и недорроботка, то скорее Микроософта.
Application.ExeNAme сводится к GetModuleFileName(0, Buffer, SizeOf(Buffer)), так что все вопросы к Билли..


 
Teren   (2004-01-06 23:12) [20]

Значит это все таки глюк? Ведь если оффициально можно было бы переименовывать EXE"шник, то и GetModuleFileNam должен отрабатывать корректно, возвращать новое имя файда?


 
Игорь Шевченко   (2004-01-06 23:44) [21]


> Ведь если оффициально можно было бы переименовывать EXE"шник,
> то и GetModuleFileNam должен отрабатывать корректно, возвращать
> новое имя файда?


С какой стати ? GetModuleFileName не лезет на диск каждый раз, когда ты ее вызываешь. А что делает Application.ExeName можно посмотреть по исходникам forms.pas

Когда научимся голову включать ?


 
Teren   (2004-01-07 00:09) [22]

Игорь Шевченко
TApplication.GetExeName обращается к ParamStr с параметром 0.

ParamStr если параметр 0 обращается к GetModuleFileName

А GetModuleFileName это
"The GetModuleFileName function retrieves the full path and filename for the executable file containing the specified module"

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


 
Teren   (2004-01-07 14:34) [23]

Игорь Шевченко, прокомментируете?


 
Teren   (2004-01-08 16:08) [24]

Игорь Шевченко, или я не прав? Вроде это все тпки недоработка Microsoft с функцией GetModuleFileName


 
Игорь Шевченко   (2004-01-08 16:11) [25]


> "The GetModuleFileName function retrieves the full path
> and filename for the executable file containing the specified
> module"


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


А какая разница - после того, как файл запустился, он уже не нужен.


 
Teren   (2004-01-09 16:02) [26]

Да кто говорит, что он нужен. НО! Ведь сказано, что GetModuleFileName возвращает полный путь к исполняемому файлу!

А это неверно, ибо он может вернуть путь к файлу, которого и вовсе не существует.


 
Игорь Шевченко   (2004-01-09 16:04) [27]

Teren (09.01.04 16:02)


> Ведь сказано, что GetModuleFileName возвращает полный путь
> к исполняемому файлу!


На момент его запуска


 
Teren   (2004-01-09 16:06) [28]

>На момент его запуска

где это сказано?


 
Игорь Шевченко   (2004-01-09 16:12) [29]

Teren (09.01.04 16:06)

В Коране ;) Например, Рихтера бы было почитать неплохо на сон грядущий.


 
sad   (2004-01-09 16:15) [30]

>> Рихтера бы было почитать неплохо на сон грядущий.
он еще и сказки пишет?


 
Игорь Шевченко   (2004-01-09 16:20) [31]

sad © (09.01.04 16:15)


> он еще и сказки пишет?


Да, для программистов младшего возраста


 
ИдиотЪ   (2004-01-09 16:35) [32]

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


 
han_malign   (2004-01-09 17:42) [33]

>где это сказано?
>В Коране ;) Например, Рихтера бы было почитать неплохо на сон грядущий.

- это еще в Фигурнове было сказано, для ДОС 3.3...

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


 
Teren   (2004-01-09 17:50) [34]

>Например, Рихтера бы было почитать неплохо на сон грядущий

Блин, причем здесь Рихтер. В Рихтере может и правильно написано, а вот в борландовском SDK нет. И в MSDN, наверное, тоже не верно. Ну не то, что не верно, а немного не точно. Есть все таки разница между "возвращает путь к файлу" и "возвращает путь к файлу на момент его запуска".


 
Anatoly Podgoretsky   (2004-01-09 17:53) [35]

sad © (09.01.04 16:15) [30]
Читаешь и говоришь
Ай да Рихтер, ай да сукин сын



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

Форум: "Потрепаться";
Текущий архив: 2004.02.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.011 c
4-2417
Леприкон
2003-11-25 15:33
2004.02.02
Работа с меню


7-2385
Дмитрий Дикун
2003-10-29 18:08
2004.02.02
Отключение клавиатуры в Notebook


14-2291
Думкин
2004-01-13 06:31
2004.02.02
С днем рождения! 13 января.


14-2334
Qwet
2004-01-10 20:49
2004.02.02
Перезагрузка Windows Xp


3-1951
ish
2004-01-09 16:12
2004.02.02
SQL Query





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский