Форум: "Основная";
Текущий архив: 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.047 c