Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.08.17;
Скачать: CL | DM;

Вниз

Определение многопользовательской / однопользовательской 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.025 c
15-1214840729
@!!ex
2008-06-30 19:45
2008.08.17
У кого есть дельфи и SynEdit откомпилируйте, пожалуйста


2-1216035531
small
2008-07-14 15:38
2008.08.17
Сеть


2-1216047370
TUserClass
2008-07-14 18:56
2008.08.17
Транзакции, господа...выручайте...


2-1216044204
eeee
2008-07-14 18:03
2008.08.17
ООП


15-1214989510
Slider007
2008-07-02 13:05
2008.08.17
С днем рождения ! 2 июля 2008 среда