Версия для печати темы
Форум на 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)