Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ Как получить путь в "Program files" etc

Автор: DIMEDROLL 26.2.2010, 23:24

что то под вечер немогу смекнуть.. хочу получить фолдер, куда установленны и устанавливаются по дефолту программы, например на виндоуз:
"C:/Program Files/"
"C:/Program Files(x86)/"
на маке(насколько помню)
":my_hd/Applications"
ну и на линухе....
как его правильнее и кросплатформеннее написать?)

Автор: Rocky 26.2.2010, 23:52

Возможно QString QDir::rootPath() поможет... Ну а дальше в зависимости от ОС (либо "Program Files", либо... хм, под маком не работал, не знаю... ) Ну а на линухе имхо итак все ясно.. root есть root. В смысе "/". Ну rootPath() и возвращает "/". А дальше наверное лучше ставить куда традиционно пользовательские программы ставятся... /usr/bin, /usr/local/bin, /usr/lib, /usr/local/lib

Во, есть еще QDir::searchPaths(). Надо посмотреть, если она возвращает $PATH, то это вроде то что нужно

Автор: SABROG 27.2.2010, 0:34

Я вижу только одну причину знать путь куда ставятся программы - собственный installer программ. Qt больше ориентирована на пользователей ОС без прав администратора. Поэтому $HOMEDIR и сохраняй файлы и настройки, которые нужны программе. А право ставить программы для всех пользователей компьютера оставь сисадмину.

Автор: Litkevich Yuriy 27.2.2010, 4:31

Цитата(Rocky @ 27.2.2010, 2:52) *
Ну а на линухе имхо итак все ясно.
Да вот как раз на линухе минимум ясности.
В Линухе, в отличие от BSD/UNIX, стандарт рекомендует ставить программы в /opt, а /user - рудимент оставшийся от BSD/UNIX.
Однако многие по прежнему ставят свои программы в стиле BSD/UNIX, т.е.:
/usr/bin/MyApp - двоичные файлы программы
/usr/share/doc/MyApp - документация программы
/var/MyApp - изменяющиеся данные программы.

А насчёт Program Files на виндовозе не очень понятно, зачем к нему путь? В инсталяторе пользователь сам может выбрать куда ставить.

Автор: kwisp 27.2.2010, 11:55

Цитата(Litkevich Yuriy @ 27.2.2010, 4:31) *
Да вот как раз на линухе минимум ясности.

смотря какой дистрибутив
в gentoo к примеру всё ясно.

Автор: DIMEDROLL 27.2.2010, 12:22

уже не удивляюсь, когда на форумах на вопрос:
"как сделать "это"?"
отвечают:
"а зачем? делай вот так и так и не парься!"
а если хватит ума еще и ответ дать "зачем тебе это нужно", то флейма на 20 страниц не избежать, где каждый посчитает нужным указать тебе на то, что ты все делаешь не правильно :)

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

Автор: panter_dsd 27.2.2010, 12:35

Use WinAPI.

Автор: Litkevich Yuriy 27.2.2010, 19:05

Цитата(DIMEDROLL @ 27.2.2010, 15:22) *
но вопрос остается открытым
Да тут только дефайнами всё оборачивать, т.е. под каждую платформу нужно своё писать.

Цитата(kwisp @ 27.2.2010, 14:55) *
смотря какой дистрибутив
в gentoo к примеру всё ясно.
собственно я об этом. Говоря "Линукс" понимай, как "Несчитанное множество *nix-подобных ОСек".

Для виндовоза, можешь воспользоватся переменной окружения
ProgramFiles
Например, следующий код:
    QString str = "ProgramFiles";
    QStringList list = QProcess::systemEnvironment();
    qDebug() << "ProgramFiles:\n" << list.filter(str);
Напечатает в консоль:
ProgramFiles =:
("CommonProgramFiles=E:\Program Files\Common Files", "ProgramFiles=E:\Program Files")

Автор: Kagami 27.2.2010, 19:09

Как сложно :)

    qDebug() << "ProgramFiles:\n" << getenv("ProgramFiles");

Автор: SABROG 28.2.2010, 16:13

Цитата(Kagami @ 27.2.2010, 19:09) *
Как сложно :)
    qDebug() << "ProgramFiles:\n" << getenv("ProgramFiles");


Так нельзя делать, хотя бы по этой причине:

Цитата
Еще одной проблемой является способ работы Windows 7 с 32-битными приложениями. Windows 7 [в 64-разрядной редакции] сохраняет 32-разрядные приложения по другому пути - в папку Program Files (x86), а 64-разрядные сохраняются в привычную Program Files. Это приводит к возникновению определенных проблем при поиске некоторых приложений, пишет Убри.

"Приложения, в которые жестко зашита папка 'Program Files', не могут корректно работать, будучи установленными в папку Program Files (x86)" - объяснил он.

Автор: Kagami 28.2.2010, 16:46

Цитата
%ProgramFiles%

This variable points to Program Files directory, which stores all the installed program of Windows and others. The default on English-language systems is C:\Program Files. In 64-bit editions of Windows (XP, 2003, Vista), there are also %ProgramFiles(x86)% which defaults to C:\Program Files (x86) and %ProgramW6432% which defaults to C:\Program Files. The %ProgramFiles% itself depends on whether the process requesting the environment variable is itself 32-bit or 64-bit (this is caused by Windows-on-Windows 64-bit redirection).


http://msdn.microsoft.com/en-us/library/aa384274%28VS.85%29.aspx

Автор: SABROG 28.2.2010, 17:50

Ага, значит если он пишет installer 64 битный и пытается установить им 32 битную программу, то она попадет прямиком в папочку с 64битными?

Автор: Kagami 28.2.2010, 18:35

Цитата(SABROG @ 28.2.2010, 17:50) *
Ага, значит если он пишет installer 64 битный и пытается установить им 32 битную программу, то она попадет прямиком в папочку с 64битными?

Это уже на совести автора инсталятора. Если известно что прога 32 битная, то можно использовать соответствующую переменную.

P.S. Топикстартер нигде не говорил что пишет инсталятор.

Автор: Iron Bug 1.3.2010, 12:48

не знаю, под линями я бы в /opt/application_name поставила. а куда ещё? можно для важности ещё имя компании туда сунуть, чтобы пересечений имён избежать. в стандартные bin-овские каталоги ставить всё подряд нехорошо, имхо. а вот админских прав может не оказаться у юзера, поэтому дать выбор, куда ставить - по умолчанию пытаться в /opt, а если нет - то в юзерский хомяк (~).

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)