Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2008.08.17;
Скачать: [xml.tar.bz2];

Вниз

Определение многопользовательской / однопользовательской Windows   Найти похожие ветки 

 
Elhat   (2007-12-04 20:39) [0]

Я так себе понимаю принцип сохранения настроек и файлов программы на диске в Windows:

если версия windows многопользовательская - то сохранять надо в папке "Application Data\Название программы" или в "Мои документы". Если версия однопользовательская - то можно сохранять в директории с программой. Поправьте если не прав.

И вот вопрос - как четко определить однопользовательскую / многопользовательскую версию? На вскидку понятно, к первым отнесем 95 / 98 / ME, ко вторым семейство NT - 2k / XP / Vista. Но хочется универсальный механизм определения, например есть еще 2003, есть NT 3.x, в дальнейшем могут появится новые ОС от microsoft, а алгоритм менять не хочется.


 
Правильный_Вася   (2007-12-04 20:53) [1]

ты еще вин 3.1 вспомни, ага
и CE


 
tesseract ©   (2007-12-04 20:58) [2]

В MSDN  есть четкие рекомендации на этот счет.


 
Elhat   (2007-12-04 20:59) [3]

Можно я думаю объявить конкурс на самый бесполезный ответ. Правильный_Вася пока впереди всех.


 
Elhat   (2007-12-04 20:59) [4]


> В MSDN  есть четкие рекомендации на этот счет


можно ссылочку?


 
Джо ©   (2007-12-04 21:09) [5]

Сомнительное архитектурное решение.
Если уж решили сохранять в папке с программой, то и сохраняйте (но потом никого не вините).
А если решили «по-людски», то вызывайте SHGetSpecialFolderPathA с CSIDL_APPDATA и смело пишите туда, куда разрешает ОС.


 
Elhat   (2007-12-04 21:32) [6]


> А если решили «по-людски», то вызывайте SHGetSpecialFolderPathA
> с CSIDL_APPDATA и смело пишите туда, куда разрешает ОС


не нравится вот что: "The Microsoft Internet Explorer 4.0 Desktop Update must be installed for this function to be available"

А какой приблизительно путь вернет эта функция например на Win95 или Win98?
Данная функция точно будет поддерживаться в следующих версиях Windows?

Можно как-то определить - можно ли вызывать эту функцию? То есть, что с будет на Win9x с версиями IE ниже 4? Этой функции вообще нет в shell32.dll или она вернет отбой?


 
Rouse_ ©   (2007-12-04 21:33) [7]

Самое правильное - CSIDL_APPDATA, это точно без обсуждений. Ну и технические статьи же есть, где рекомендации приводят MVP.

Например: http://support.microsoft.com/kb/310294


 
homm ©   (2007-12-04 21:39) [8]

> [6] Elhat   (04.12.07 21:32)
> Можно как-то определить - можно ли вызывать эту функцию?

Естественно. Если она экспортируется в соответствующей длл, то ее можно вызвать, если не экспортируется, смело пигпи в папку программы.


> Данная функция точно будет поддерживаться в следующих версиях
> Windows?
Куда она денется.


 
Джо ©   (2007-12-04 21:47) [9]

[6] Elhat   (04.12.07 21:32)
А какой приблизительно путь вернет эта функция например на Win95 или Win98?

Сейчас проверил — у меня выдало C:\WINDOWS\APPDATA


 
Elhat   (2007-12-04 21:48) [10]


> Например: http://support.microsoft.com/kb/310294


это явно статья не о том, что я спрашиваю. Четко написано "How to write a Windows XP Application..."

Я же говорю об универсальном алгоритме, учитывая старые ОС. Указанный алгоритм - лишь подчасть для XP... И видимо, для w2k и будущих ОС.

В принципе, если узнать ответы на вопросы:

А какой приблизительно путь вернет эта функция например на Win95 или Win98?

Можно как-то определить - можно ли вызывать эту функцию? То есть, что с будет на Win9x с версиями IE ниже 4? Этой функции вообще нет в shell32.dll или она вернет отбой?


и сделать так - если можно вызвать функцию SHGetSpecialFolderPathA - то вызывать ее, если нельзя ее вызвать - то хранить данные в директории с программой.

Правда, может возникнуть косяк в NT 3.x наверное, в нем этой функции может и не быть, а запись в директорию с программой запрещена ;(


 
Джо ©   (2007-12-04 21:48) [11]

> [9] Джо ©   (04.12.07 21:47)
> [6] Elhat   (04.12.07 21:32)
> А какой приблизительно путь вернет эта функция например
> на Win95 или Win98?
> Сейчас проверил — у меня выдало C:\WINDOWS\APPDATA

Это в Windows 98 SE.


 
Джо ©   (2007-12-04 21:51) [12]

Если же подстраховываться от того, что IE 4.0 может быть не установлен на Win 95, то тогда, как советует Microsoft, можно вызывать ShGetFolderPath и таскаться с собой свободно-распространяемую ShFolder.dll от MS.


 
Elhat   (2007-12-04 22:06) [13]


> Если она экспортируется в соответствующей длл, то ее можно
> вызвать


а вы уверены, что все именно так? Ведь может там и заглушка стоять по идее. А если самой функции нету...
Тогда очень странно, данная функция экспортируется в модуле ShlObj, причем линкуется статически, хотя для этого модуля это оправданно наверное...

Но все таки вы уверены, что здесь не заглушка, а именно будет отсутствие функции SHGetSpecialFolderPathA? А если такая функция есть - значит она рабочая?


 
Elhat   (2007-12-04 22:12) [14]

Образовался еще такой вопросец - а как определить путь к темповой папке, в которую разрешена запись текущему пользователю для работы с временными файлами?


 
Джо ©   (2007-12-04 22:15) [15]

GetTempPath


 
homm ©   (2007-12-04 22:18) [16]

> [13] Elhat   (04.12.07 22:06)
> а вы уверены, что все именно так? Ведь может там и заглушка
> стоять по идее.
неверная идея.

> А если самой функции нету...
Ага функция экспортируется, а ее нет. Я понимаю, что на майкросовт одни индусы работают, но это уже был бы перебор.


> Тогда очень странно, данная функция экспортируется в модуле ShlObj,
Не может она по определению экспортироваться в модуле ShlObj.


> причем линкуется статически, хотя для этого модуля это оправданно
> наверное...
Твоя задача сделать динамическую линковку с проверкой.


> [14] Elhat   (04.12.07 22:12)
> Образовался еще такой вопросец - а как определить путь к
> темповой папке, в которую разрешена запись текущему пользователю
> для работы с временными файлами?

Смотреть переменную окружения temp.


 
homm ©   (2007-12-04 22:19) [17]

> [15] Джо ©   (04.12.07 22:15)
> GetTempPath

Хотя наверное это более правильно.


 
Anatoly Podgoretsky ©   (2007-12-04 22:36) [18]

> Elhat  (04.12.2007 22:12:14)  [14]

Это две разные вещи, путь и права, как правило права есть.


 
Elhat   (2007-12-04 23:51) [19]

спасибо всем!



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2008.08.17;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.038 c
2-1215718154
IvanS
2008-07-10 23:29
2008.08.17
packed record в строку


2-1216116471
Костик
2008-07-15 14:07
2008.08.17
как определить координаты?


2-1216036098
small
2008-07-14 15:48
2008.08.17
локальная сеть


15-1214983184
kaif
2008-07-02 11:19
2008.08.17
Как это называется?


2-1215688680
Alexei
2008-07-10 15:18
2008.08.17
Компонент для подсветки синтаксиса





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский