Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.10.2011, 16:34   #1
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
По умолчанию GetCurrentDir для Windows 7

Почему функция GetCurrentDir не работает в Windows 7 ? Может и работает, но как-то не так, в чем разница?
даешь высокое напряжение
Vova777 вне форума Ответить с цитированием
Старый 12.10.2011, 19:34   #2
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Она работает.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 24.08.2012, 21:41   #3
Andrey_Vladimirovi
 
Регистрация: 24.08.2012
Сообщений: 5
По умолчанию

Vova777 прав.

Если программу, в которой сразу после запуска используется функция GetCurrentDir, запустить в Windows 7 через "Запуск от имени администратора" (впрочем, как и через Планировщика заданий с административными или системными правами), то эта функция вернет путь "C:\Windows\system32". Проверял на Win 7 Pro x64 Ru SP1. Возможно, если бы моя прога была x64, то возвращался бы путь "C:\Windows\SysWOW64".

В Windows XP такого нет, проверял.

Пока думаю как решить эту проблему. Если накопаю решение, то попробую не забыть написать.
Andrey_Vladimirovi вне форума Ответить с цитированием
Старый 24.08.2012, 22:07   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а нефиг привязываться к текущей директории, обычно это вредно.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 24.08.2012, 22:11   #5
phphel
Форумчанин
 
Аватар для phphel
 
Регистрация: 12.07.2010
Сообщений: 249
По умолчанию

http://www.programmersforum.ru/showp...12&postcount=4
Moonquake
phphel вне форума Ответить с цитированием
Старый 24.08.2012, 22:15   #6
Andrey_Vladimirovi
 
Регистрация: 24.08.2012
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
а нефиг привязываться к текущей директории, обычно это вредно.
В папке, откуда запускается программа, находится файл параметров, из которых она узнает необходимые пути. Так удобнее менять параметры не переписывая программу.

"нефиг" - это из-за невоспитанности?

Цитата:
Сообщение от phphel Посмотреть сообщение
Спасибо, попробую позже. Сейчас пока времени нет.

Последний раз редактировалось Stilet; 24.08.2012 в 22:33.
Andrey_Vladimirovi вне форума Ответить с цитированием
Старый 24.08.2012, 22:29   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
В папке, откуда запускается программа, находится файл параметров, из которых она узнает необходимые пути. Так удобнее менять параметры не переписывая программу.
папка в которой находится программа не является текущей вообще то.
это разные вещи.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.08.2012, 16:39   #8
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Возможно, если бы моя прога была x64, то возвращался бы путь "C:\Windows\SysWOW64".
SysWOW64 не возвращается никогда. System32 для 32-битной программы - это и есть SysWOW64 (читаем про file system redirection).
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 25.08.2012, 20:35   #9
Andrey_Vladimirovi
 
Регистрация: 24.08.2012
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
папка в которой находится программа не является текущей вообще то.
это разные вещи.
По идее, если никто не менял пути, то после запуска программа получает текущей путь из которого запустилась. Это без проблем работало в Windows 2000, XP, 2003.

Похоже, разобрался в проблеме. Я дважды был не прав.

1. Delphi не виновата, я действительно применял не ту функцию, которую нужно было использовать. Вот эти две, ExtractFilePath(Application.ExeName ) и ParamStr(0), дают то, что надо.

2. Я запускал программу из папки, расположенной в "C:\Windows\" и при этом видимо Windows меняла текущую директорию для программы (зачем - ?). Если ее запустить из этого же пути, но через Far Manager, то проблемы нет. Или если запустить из папки расположенной в "C:\Program Files\", тоже все OK. Но, нужно запускать программу по заданию и это задание мне удобнее создавать командным файлом, нежели вручную. Создать работающее задание с помощью командного файла для программы расположенной в пути с пробелами я так и не смог, поэтому и запихнул программу в путь без пробелов. Как я написал выше, в предыдущих версиях Windows такой проблемы не было (Vista я не использую).

В общем, всем спасибо за помощь.
Andrey_Vladimirovi вне форума Ответить с цитированием
Старый 25.08.2012, 20:46   #10
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Выдержка из http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Цитата:
lpCurrentDirectory [in, optional]
The full path to the current directory for the process. The string can also specify a UNC path.
If this parameter is NULL, the new process will have the same current drive and directory as the calling process.
(This feature is provided primarily for shells that need to start an application and specify its initial drive and working directory.)
Прошу обратить внимание на подчеркнутую строку, и на что что все процессы создаются через вызов этой функции (а в параметрах ярлыка часто указывается директория не соответствующая расположению файла).
Плюс "общая" текущая директория может смениться к примеру командой cd
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}

Последний раз редактировалось Johnson; 25.08.2012 в 20:53.
Johnson вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дрова для Windows 7 ExcellentMind Windows 4 20.06.2011 15:02
какие инструменты используются для программирования для windows mobile 5 или 6 zazic2p Свободное общение 15 06.06.2011 08:05
Драйвер для hp laserjet 1010 для windows 7 Юзер7 Общие вопросы C/C++ 6 04.08.2010 09:17
Windows для ноутбуука delphin100 Windows 2 18.09.2008 20:01
MC для Windows Иллидан Софт 6 02.07.2008 08:27