![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Определение многопользовательской / однопользовательской Windows
Elhat © (2007-12-04 20:39:00)Я так себе понимаю принцип сохранения настроек и файлов программы на диске в Windows:
если версия windows многопользовательская - то сохранять надо в папке "Application Data\Название программы" или в "Мои документы". Если версия однопользовательская - то можно сохранять в директории с программой. Поправьте если не прав.
И вот вопрос - как четко определить однопользовательскую / многопользовательскую версию? На вскидку понятно, к первым отнесем 95 / 98 / ME, ко вторым семейство NT - 2k / XP / Vista. Но хочется универсальный механизм определения, например есть еще 2003, есть NT 3.x, в дальнейшем могут появится новые ОС от microsoft, а алгоритм менять не хочется.
Elhat (2007-12-04 23:51:00) [1]спасибо всем!
Anatoly Podgoretsky (2007-12-04 22:36:00) [2]> Elhat (04.12.2007 22:12:14) [14]
Это две разные вещи, путь и права, как правило права есть.
homm (2007-12-04 22:19:00) [3]> [15] Джо © (04.12.07 22:15)
> GetTempPath
Хотя наверное это более правильно.
homm (2007-12-04 22:18:00) [4]> [13] Elhat (04.12.07 22:06)
> а вы уверены, что все именно так? Ведь может там и заглушка
> стоять по идее.
неверная идея.
> А если самой функции нету...
Ага функция экспортируется, а ее нет. Я понимаю, что на майкросовт одни индусы работают, но это уже был бы перебор.
> Тогда очень странно, данная функция экспортируется в модуле ShlObj,
Не может она по определению экспортироваться в модуле ShlObj.
> причем линкуется статически, хотя для этого модуля это оправданно
> наверное...
Твоя задача сделать динамическую линковку с проверкой.
> [14] Elhat (04.12.07 22:12)
> Образовался еще такой вопросец - а как определить путь к
> темповой папке, в которую разрешена запись текущему пользователю
> для работы с временными файлами?
Смотреть переменную окружения temp.
Джо (2007-12-04 22:15:00) [5]GetTempPath
Elhat (2007-12-04 22:12:00) [6]Образовался еще такой вопросец - а как определить путь к темповой папке, в которую разрешена запись текущему пользователю для работы с временными файлами?
Elhat (2007-12-04 22:06:00) [7]
> Если она экспортируется в соответствующей длл, то ее можно
> вызвать
а вы уверены, что все именно так? Ведь может там и заглушка стоять по идее. А если самой функции нету...
Тогда очень странно, данная функция экспортируется в модуле ShlObj, причем линкуется статически, хотя для этого модуля это оправданно наверное...
Но все таки вы уверены, что здесь не заглушка, а именно будет отсутствие функции SHGetSpecialFolderPathA? А если такая функция есть - значит она рабочая?
Джо (2007-12-04 21:51:00) [8]Если же подстраховываться от того, что IE 4.0 может быть не установлен на Win 95, то тогда, как советует Microsoft, можно вызывать ShGetFolderPath и таскаться с собой свободно-распространяемую ShFolder.dll от MS.
Elhat (2007-12-04 21:48:00) [9]
> Например: http://support.microsoft.com/kb/310294
это явно статья не о том, что я спрашиваю. Четко написано "How to write a Windows XPApplication..."
Я же говорю об универсальном алгоритме, учитывая старые ОС. Указанный алгоритм - лишь подчасть для XP... И видимо, для w2k и будущих ОС.
В принципе, если узнать ответы на вопросы:
А какой приблизительно путь вернет эта функция например на Win95 или Win98?
Можно как-то определить - можно ли вызывать эту функцию? То есть, что с будет на Win9x с версиями IE ниже 4? Этой функции вообще нет в shell32.dll или она вернет отбой?
и сделать так - если можно вызвать функцию SHGetSpecialFolderPathA - то вызывать ее, если нельзя ее вызвать - то хранить данные в директории с программой.
Правда, может возникнуть косяк в NT 3.x наверное, в нем этой функции может и не быть, а запись в директорию с программой запрещена ;(
Джо (2007-12-04 21:48:00) [10]> [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:47:00) [11][6] Elhat (04.12.07 21:32)
А какой приблизительно путь вернет эта функция например на Win95 или Win98?
Сейчас проверил — у меня выдало C:\WINDOWS\APPDATA
homm (2007-12-04 21:39:00) [12]> [6] Elhat (04.12.07 21:32)
> Можно как-то определить - можно ли вызывать эту функцию?
Естественно. Если она экспортируется в соответствующей длл, то ее можно вызвать, если не экспортируется, смело пигпи в папку программы.
> Данная функция точно будет поддерживаться в следующих версиях
> Windows?
Куда она денется.
Rouse_ (2007-12-04 21:33:00) [13]Самое правильное - CSIDL_APPDATA, это точно без обсуждений. Ну и технические статьи же есть, где рекомендации приводят MVP.
Например: http://support.microsoft.com/kb/310294
Elhat (2007-12-04 21:32:00) [14]
> А если решили «по-людски», то вызывайте 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 или она вернет отбой?
Джо (2007-12-04 21:09:00) [15]Сомнительное архитектурное решение.
Если уж решили сохранять в папке с программой, то и сохраняйте (но потом никого не вините).
А если решили «по-людски», то вызывайте SHGetSpecialFolderPathA с CSIDL_APPDATA и смело пишите туда, куда разрешает ОС.
Elhat (2007-12-04 20:59:00) [16]
> В MSDN есть четкие рекомендации на этот счет
можно ссылочку?
Elhat (2007-12-04 20:59:00) [17]Можно я думаю объявить конкурс на самый бесполезный ответ. Правильный_Вася пока впереди всех.
tesseract (2007-12-04 20:58:00) [18]В MSDN есть четкие рекомендации на этот счет.
Правильный_Вася (2007-12-04 20:53:00) [19]ты еще вин 3.1 вспомни, ага
и CE