Гость
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как узнать текущий путь (диск с директорий) в котором программа считает себя? / 25 сообщений из 37, страница 1 из 2
13.02.2022, 18:21
    #40133834
InterSky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать текущий путь (диск с директорий) в котором программа считает себя?
Есть CurrentDir и Application.ExeName, но это НЕ то!

Если я запишу программу на флешке, а потом вытащу её и снова вставлю, то этот «текущий путь» у программы пропадает! (в то время как currentdir и exename по прежнему будут выдавать «d:\» и «d:\Project1.exe»).
Например запустив программу с флешки, вытащив её и вставив на место, если вы нажмёте кнопку выполняющую CreateDir('123'); то директория не создастся. А если попытаетесь создать файл:
AssignFile(F, '123.txt');
Rewrite(F);
то Rewrite выдаст ошибку “I/O error 433”.

В то время как если жёстко укажу путь с диском 'd:\123' то он будет и создавать директорию и файл. То есть, текущий путь где-то не из CurrentDir берётся.
...
Рейтинг: 0 / 0
13.02.2022, 18:31
    #40133835
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать текущий путь (диск с директорий) в котором программа считает себя?
...
Рейтинг: 0 / 0
13.02.2022, 19:22
    #40133836
InterSky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать текущий путь (диск с директорий) в котором программа считает себя?
Dimitry Sibiryakov,

Нет. GetCurrentDirectory как и CurrentDirectory после передёргивания флешки по прежнему указывает на то что текущая директория “d:\”
Одна ко создать файл или директорию в текуще директории уже невозможно, а если указать d:\... то всё создаётся.
...
Рейтинг: 0 / 0
13.02.2022, 19:49
    #40133837
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать текущий путь (диск с директорий) в котором программа считает себя?
InterSky,

С точки зрения "вытаскиваня флешки" чем тебя Application.ExeName не устраивает?

Куда ты вообще хочешь свой файл сохранять?

Это мне напоминает сценарий:

Я запустил программу с флешки, а потом ее из ПК вытащил и в другой ПК вставил.
Хочу что бы файлы из ранее запущенной программы на флешку в другом компе сохранялись.
...
Рейтинг: 0 / 0
13.02.2022, 19:54
    #40133839
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать текущий путь (диск с директорий) в котором программа считает себя?
InterSky
Если я запишу программу на флешке, а потом вытащу её и снова вставлю,

Пациент, не делайте ТАК - (с).
...
Рейтинг: 0 / 0
13.02.2022, 20:01
    #40133840
bk0010
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать текущий путь (диск с директорий) в котором программа считает себя?
Забудьте про текущий путь, иначе никогда не отладитесь до конца. Используйте только полный.
...
Рейтинг: 0 / 0
13.02.2022, 20:12
    #40133842
InterSky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать текущий путь (диск с директорий) в котором программа считает себя?
Я понимаю что тут очень много знатаков религии, музыки и медицины... желающих показать свои познания в этих областях.
Но вопрос вполне конкретный - Откуда программа получает информацию о своём местоположении (текущей директории для записи/чтения). И это не GetCurrentDir, так как он не меняется после передёргивания флешки, а файл или директорию в текущей директории создать уже нельзя.
...
Рейтинг: 0 / 0
13.02.2022, 20:18
    #40133843
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать текущий путь (диск с директорий) в котором программа считает себя?
InterSkyНет. GetCurrentDirectory как и CurrentDirectory после передёргивания флешки по
прежнему указывает на то что текущая директория “d:\”

А я и не говорил, что оно должно работать так как ты хочешь. В статье
описывается как оно работает на самом деле. Если ты собственными шаловливыми
ручками сделал текущий каталог недоступным - это твоя проблема. Он (внезапно) не
обязан быть валидным или существующим. Это просто глобальная переменная
процесса, которой можно назначить любое вменяемое или невменяемое значение.

Если ты хочешь в своей программе не допускать подобной проблемы - отрабатывай
MW_DEVICECHANGE и позаботься чтобы текущий каталог стал валидным после
шаловливых ручек.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
13.02.2022, 22:29
    #40133862
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать текущий путь (диск с директорий) в котором программа считает себя?
Dimitry Sibiryakov,

Дим, ну вот ты сразу по лбу канделябром :)
...
Рейтинг: 0 / 0
13.02.2022, 22:31
    #40133863
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать текущий путь (диск с директорий) в котором программа считает себя?
InterSky,

Друже, а ничего, что твой D:\ , когда ты вставишь флешку в другой комп - отмапится на Z:\ ?
...
Рейтинг: 0 / 0
13.02.2022, 23:41
    #40133867
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать текущий путь (диск с директорий) в котором программа считает себя?
Друже, а ничего, что твой D:\ , когда ты вставишь флешку в другой комп - отмапится на Z:\ ?
Даже можно представить другую ситуацию, когда после извлечённой флешки вставляется ДРУГАЯ флешка и получает туже метку D:\, а извлечённая вставляется следующей и получает F:\
...
Рейтинг: 0 / 0
14.02.2022, 02:18
    #40133874
northener
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать текущий путь (диск с директорий) в котором программа считает себя?
InterSky
Я понимаю что тут очень много знатаков религии, музыки и медицины... желающих показать свои познания в этих областях.
Но вопрос вполне конкретный - Откуда программа получает информацию о своём местоположении (текущей директории для записи/чтения). И это не GetCurrentDir, так как он не меняется после передёргивания флешки, а файл или директорию в текущей директории создать уже нельзя.

Конкретный, но очень в данном случае дурной и неграмотный. Вот нафига в современную эпоху пытаться записать какой-то файл в каталог с исполняемым файлом? Винда для записи таких файлов представляет кучу вариантов не зависящих от "вставленности флешки".
...
Рейтинг: 0 / 0
14.02.2022, 02:44
    #40133875
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать текущий путь (диск с директорий) в котором программа считает себя?
northener
Винда для записи таких файлов представляет кучу вариантов
Один говеннее другого...

Реестр нужен только для того что бы найти само ПО.
Файлы хранящиеся в каталоге с ПО - рулят.
Каталоги в дебрях User не выбор advanced юзеров ПК.
Это попытка подражать андроиду, где секюрити уже сожрала все права юзера.
...
Рейтинг: 0 / 0
14.02.2022, 05:20
    #40133877
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать текущий путь (диск с директорий) в котором программа считает себя?
rgreat
Файлы хранящиеся в каталоге с ПО - рулят.
Да никто там уже давно не рулит, разве что ридонли-конфиги.
Прав-то нет. XP уже вроде помирать начало таки.
Можно, конечно, издеваться над пользователями и заставлять их не ставить в PF, поднимать права на папку... Но это всё смешно.
...
Рейтинг: 0 / 0
14.02.2022, 06:22
    #40133879
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать текущий путь (диск с директорий) в котором программа считает себя?
YuRock,

Ну да. Ну да.

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

Ну и слава богу это пока без меня.

А заставлять никого ничему не надо. Надо делать нормальные инсталляторы.
...
Рейтинг: 0 / 0
14.02.2022, 07:16
    #40133881
asutp2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать текущий путь (диск с директорий) в котором программа считает себя?
rgreat
YuRock,

Ну да. Ну да.

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

Ну и слава богу это пока без меня.

А заставлять никого ничему не надо. Надо делать нормальные инсталляторы.
Как раз хранение приложения и его конфигов в C:\Users\%user%\AppData\Roaming позволяет и минимизировать общение с безопасниками, и использовать доступ к приложению с любого компа при использовании active directory, и даже иметь возможность самообновления exe-шника самостоятельно (он может переписать сам себя).
А при хранении приложения в Program Files всё намного сложнее.

И тебе правильно говорят - хватит мыслить категориями XP, она давно умерла))
...
Рейтинг: 0 / 0
14.02.2022, 07:26
    #40133882
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать текущий путь (диск с директорий) в котором программа считает себя?
rgreat
По мнению безопасников все должно быть запрещено, а юзер должен страдать и писать заявки и объяснительные на каждый чих.
Что характерно, по опыту это от вирусов и проблем нихрена не спасает, но работать мешает.
Да ничего никому не мешает. Доступ к базе есть, и этого достаточно. А локальные настройки и документы - в локальных настройках и документах. Всё логично и удобно.
rgreat
А заставлять никого ничему не надо. Надо делать нормальные инсталляторы.
Ну да, не разрешать ставить программы туда, куда хочет пользователь (и предполагает ОС) это "нормальные инсталляторы"
...
Рейтинг: 0 / 0
14.02.2022, 23:56
    #40134111
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать текущий путь (диск с директорий) в котором программа считает себя?
InterSky
Dimitry Sibiryakov,

Нет. GetCurrentDirectory как и CurrentDirectory после передёргивания флешки по прежнему указывает на то что текущая директория “d:\”
Одна ко создать файл или директорию в текуще директории уже невозможно, а если указать d:\... то всё создаётся.


Замечу, что можно сделать не только GetCurrentDirectory но и SetCurrentDirectory и установить каталог как нужно. Останется только его найти. Поиск: запоминаем идентификатор флешки с которой запустились по GUID тома (гуглить volume guid windows). Обрабатываем MW_DEVICECHANGE и в момент когда том запуска вдруг окажется опять доступным, устанавливаем SetCurrentDirectory на возможно новый его путь, либо старый, если остался.
...
Рейтинг: 0 / 0
15.02.2022, 00:38
    #40134118
northener
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать текущий путь (диск с директорий) в котором программа считает себя?
makhaon
InterSky
Dimitry Sibiryakov,

Нет. GetCurrentDirectory как и CurrentDirectory после передёргивания флешки по прежнему указывает на то что текущая директория “d:\”
Одна ко создать файл или директорию в текуще директории уже невозможно, а если указать d:\... то всё создаётся.


Замечу, что можно сделать не только GetCurrentDirectory но и SetCurrentDirectory и установить каталог как нужно. Останется только его найти. Поиск: запоминаем идентификатор флешки с которой запустились по GUID тома (гуглить volume guid windows). Обрабатываем MW_DEVICECHANGE и в момент когда том запуска вдруг окажется опять доступным, устанавливаем SetCurrentDirectory на возможно новый его путь, либо старый, если остался.

А теперь вернемся к топику и зададим себе и особенно ТС'у вопрос. А нафига нужно передергивать флешку если она нужна в процессе работы программы?
...
Рейтинг: 0 / 0
15.02.2022, 10:34
    #40134157
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать текущий путь (диск с директорий) в котором программа считает себя?
northener,

так то всяко бывает. мы тоже распространяем часть софта на флешках (точнее юзеры так пишут софт). бывает выдергивают. я, правда, особо не заморачивался, получается записать файл по изначальному пути старта пишу. нет - пропускаю запись.
...
Рейтинг: 0 / 0
15.02.2022, 11:39
    #40134178
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать текущий путь (диск с директорий) в котором программа считает себя?
makhaon,

ага. Я делал софт, генерирующий дистрибутивы нашего ПК, а также специальную версию ПК, работающую с флешки. В обоих случаях даже в голову не приходило, что нужно предусмотреть ситуацию, когда какой-то чудак в процессе работы флешку выдернет.
...
Рейтинг: 0 / 0
15.02.2022, 12:42
    #40134198
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать текущий путь (диск с директорий) в котором программа считает себя?
ъъъъъ
В обоих случаях даже в голову не приходило, что нужно предусмотреть ситуацию, когда какой-то чудак в процессе работы флешку выдернет.

надо бы и отключение Винта предусмотреть
...
Рейтинг: 0 / 0
15.02.2022, 14:22
    #40134252
asutp2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать текущий путь (диск с директорий) в котором программа считает себя?
и отключение процессора, мало ли что
...
Рейтинг: 0 / 0
15.02.2022, 21:35
    #40134380
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать текущий путь (диск с директорий) в котором программа считает себя?
что бы потом эврикавскими логами ящик не заваливало, лучше как минимум
{$SetPEFlags IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP}
воткнуть + обработку записи на флешку
хотя, конечно, дело тут хозяйское )
можете и просто софт покрэшить
...
Рейтинг: 0 / 0
16.02.2022, 12:19
    #40134485
GunSmoker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать текущий путь (диск с директорий) в котором программа считает себя?
Оффтопик
makhaon
что бы потом эврикавскими логами ящик не заваливало

Expected exceptions
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как узнать текущий путь (диск с директорий) в котором программа считает себя? / 25 сообщений из 37, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]