Re[8]: Получить путь к папке где лежит exe файл
От: Аноним  
Дата: 19.11.08 09:16
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Правильный ответ — хранить рядом с экзешником, либо считать дефолтом размещение данных рядом с экзешником (а инсталлятор пусть в реестр пишет, что хранить нужно в АппДата).

Есть вариант в реестр вообще не гадить, а просто ключик командной строки предусмотреть. Есть ключик — нас честно проинсталлировали (а инсталлятор создал ярлык для запуска с ключиком), ищем/создаём конфиг в Documents and Settings/Users. Нету ключика — похоже нас с флешки запускают или устанавливали копированием, конфиг ищем/создаём рядом. Ещё вариант без всяких ключиков — проверять тип носителя с которого нас запускают и если он DRIVE_REMOVABLE — автоматом проявлять портабельность, т.е. искать/создавать конфиг рядом.
Кстати, есть крайний вариант — вообще без файла конфига и ключей реестра — всё через командную строку, правда менять ярлык запуска запаришься, да и некузяво. Впрочем, когда параметров немного, вполне может сгодиться.
Re[9]: Получить путь к папке где лежит exe файл
От: Кодт Россия  
Дата: 19.11.08 10:20
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте, Кодт, Вы писали:


К>>Правильный ответ — хранить рядом с экзешником, либо считать дефолтом размещение данных рядом с экзешником (а инсталлятор пусть в реестр пишет, что хранить нужно в АппДата).

А>Есть вариант в реестр вообще не гадить, а просто ключик командной строки предусмотреть. Есть ключик — нас честно проинсталлировали (а инсталлятор создал ярлык для запуска с ключиком), ищем/создаём конфиг в Documents and Settings/Users. Нету ключика — похоже нас с флешки запускают или устанавливали копированием, конфиг ищем/создаём рядом. Ещё вариант без всяких ключиков — проверять тип носителя с которого нас запускают и если он DRIVE_REMOVABLE — автоматом проявлять портабельность, т.е. искать/создавать конфиг рядом.
А>Кстати, есть крайний вариант — вообще без файла конфига и ключей реестра — всё через командную строку, правда менять ярлык запуска запаришься, да и некузяво. Впрочем, когда параметров немного, вполне может сгодиться.

Ключик неудобно: появится возможность запускать так и этак. Тем более, если виндоуз ассоциирует приложение с типом файлов (это можно штатно сделать любому юзеру, а не в реестре ковыряться).

Можно проверять наличие конфига в аппдата/реестре; если нет — то считать приложение портабельным.
С другой стороны, а если человек со своей флешкой пришёл на машину, где уже создан аккаунт... Или если человеку хочется иметь несколько сборок?

Так что самый симпатичный вариант — это рядом с программой держать файл "самый первичный конфиг", в котором прописаны условия размещения основного конфига
— в общих юзерах
— в текущем юзере
— в папке запуска
— в произвольной папке
Это буквально одна строчка, с абсолютным, относительным или макросным путём.
Скажем, %MYPROGRAM% означает путь к экзешнику, а %APPDATA%, %USERPROFILE% и %ALLUSERSPROFILE% — штатные переменные окружения виндоуза (XP; про 2K, NT и 9* затруднюсь сказать).

И более того: можно сделать бат-файл
:::: определение каталога, где запущен данный файл (маленькая хитрость)
for %%F in (%0) do set THISDIR=%%~dpF
set THISDIR=%THISDIR:~0,-1%


:::: раскомментировать одно из:
:::: для всех
:: set MYPROGRAMCONFIG=%ALLUSERSPROFILE%\Application Data\MyProgram
:::: для текущего
:: set MYPROGRAMCONFIG=%APPDATA%
:::: для портабельного
:: set MYPROGRAMCONFIG=%THISDIR%\Config1
:::: для произвольного
:: set MYPROGRAMCONFIG=c:\MyProgConfig2

:::: далее запускаем программу, а она будет смотреть на переменную окружения MYPROGRAMCONFIG
MyProgram.exe
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Перекуём баги на фичи!
Re: Получить путь к папке где лежит exe файл
От: sfinks12  
Дата: 23.11.08 17:57
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как можно получить путь папки где лежит моя программа?

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


LPTSTR GetExecutable()
{
    HMODULE hModule = ::GetModuleHandle(NULL);
    LPTSTR  filename = (LPTSTR)malloc(MAX_PATH* sizeof(TCHAR));
    ::GetModuleFileName(hModule, filename, MAX_PATH);
    return filename;
}


А пригодится это может когда ты хочешь например апгрейднуть свои бинарики. Правда в Висте это не так просто надо сначала админских прав попросить.
Re[3]: Получить путь к папке где лежит exe файл
От: ZAMUNDA Земля для жалоб и предложений
Дата: 26.11.08 16:00
Оценка:
Здравствуйте, CreatorCray, Вы писали:

L>> Он не врубается, что так делать нельзя, ну или по меньшей мере нелогично! Господи, куда катимся...

CC>А я уже давно хочу ржавой секирой убивать аффтароф, чьи творения интенсивно срут мне в Documents and Settings и не позволяют задать кастомный путь. Уж лучше пусть хранят все рядом с собой. Так куда удобнее.
Насчёт сранья я ниже сказал, а насчёт custom пути согласен, порой бесит до неприличия.

CC>Почему кто то решает за меня, что и где у меня должно лежать?

Ну почему ж, ты можешь настроить путь для своего профиля и все проги будут "срать" в это место. У меня, например, для этого отдельный хард. Там торренты на дополнительном и пол-свопника с профилями на основном разделе. А масдай и прочее на другом харде. Так что куда удобнее перенастроить расположение Document and Settings чем ломать голову над раздувшейся папкой с прогой какой-нить.
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
Re[4]: Получить путь к папке где лежит exe файл
От: CreatorCray  
Дата: 27.11.08 08:38
Оценка:
Здравствуйте, ZAMUNDA, Вы писали:

CC>>Почему кто то решает за меня, что и где у меня должно лежать?

ZAM>Ну почему ж, ты можешь настроить путь для своего профиля
Профиль давным давно перенесен с С. Причем его подпапки (инеткэш и проч.) тоже раскиданы в более удобные места.

ZAM>все проги будут "срать" в это место.

Мне не надо чтоб они вообще гадили в профиль. Мне надо чтобы каждая прога гадила исключительно в отведенное ей место. Не в общую помойку, а для каждой проги — свое место.
Практически все старые проги так и делают. А вот с новыми гемор.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.