MacBuster (Registered Developer)
2003/06/19 13:55
|
Структура каталогов системы
|
| |
Предлагаю стандартизировать структура каталогов файловой системы что-бы, к примеру пользователям не приходилось думать куда надо пихнуть библиотеки и файлы для каждой программы.
Проект структуры каталогов системы:
Apps ; общий каталог приложений, в котором для каждой программы
; создаются подкаталоги
MyFiles ; каталог для файлов пользователя
|__Docs ; текстовые документы
|__Pics ; графические файлы
|__Music ; музыкальные файлы
|__Video ; видеофрагмены
System ; Главный системный каталог, где размещаются файлы-команды
; attr, boot и проч. (ассигн Sys:)
|__Drivers ; драйверы для внешних устройств
|__Fonts ; общие шрифты для программ (ассигн Fonts:)
|__Libs ; общие библиотеки (ассигн Libs:)
|__Licences ; каталог для размещения лицензий на использование shareware
|__Locales ; каталоги для интерфейсов (переведенные на другие языки)
|__Logs ; лог-файлы инсталляции, деинсталляции, отладки и т.д.
|__Prefs ; файлы настроек (ассигн Prefs:)
|__Reg-Keys ; регистрационные ключи для shareware программ
|__StartUp ; файлы предназначенные для запуска при загрузки системы
|__Roms ; образы прошивок ПЗУ
|__Temp ; для временных файлов, удаляемых после завершения работы
; программ (ассигн Temp:)
Есть предложения, дополнения, категорические возражения ?
|
uzWer (stranger
)
2003/06/19 18:10
|
|
Неплохо. Есть предложение...
А если завести в корневом каталоге файлик типа "dir.inf" где в каком - либо формате описать .ту структуру каталогов. Системные утилиты читали - бы этот файл и правильно устанавливались...
|
cr0acker (member)
2003/06/19 18:33
|
|
> Есть предложения, дополнения, категорические возражения ?
Надо напсать программу перносчик! А то у меня другая структура винта:)
|
cr0acker (member)
2003/06/19 18:37
|
|
Тока ещё двух асигнов не хватает 'C:" и 'L:' ^)
|
Denis Parinov (Sprinter Team)
2003/06/20 03:20
|
|
> Проект структуры каталогов системы:
А почему не:
/etc
/usr
/var
? ;)
на самом деле я считаю, что привязывать все к именам каталогов нестоит. Потом это еще боком выйдет. Лучше сделать это все настраиваемым.
Самый простой вариант на сегодняшний день, написать какой-нибудь readvars.exe который будет считывать системные переменные из какого-нибудь variable.ini и устанавливать их в окружении системы.
Да хоть в bat-фойле можно все сделать.
--------------------------------
SET HOSTDRIVE=C:
SET SOFTWARE=%HOSTDRIVE%\Apps
SET USERDATA=%HOSTDRIVE%\MyFiles
SET SYSDIR=%HOSTDRIVE%\SYSTEM
SET DRIVERS=%SYSDIR%\Drivers
SET FONTS=%SYSDIR%\Fonts
SET LIBRARY=%SYSDIR%\Libs
SET LICENSE=%SYSDIR%\Licenses
SET LOCALE=%SYSDIR%\Locales
SET LOG=%SYSDIR%\Logs
SET REGKEYS=%SYSDIR%\Reg-Keys
SET STARTUP=%SYSDIR%\StartUp
--------------------------------
|
MacBuster (Registered Developer)
2003/06/20 10:57
|
|
> Тока ещё двух асигнов не хватает 'C:" и 'L:' ^)
Если под "C" понимать путь к файлам-командам, то для этого указан ассигн "Sys:". Кстати сделать ассигн "C:" невозможно, т.к. это приведёт к тому что будут путать диск C: и ассигн "C:". Что ты собираешься размещать в спринтеровском "L" ?
|
MacBuster (Registered Developer)
2003/06/20 11:16
|
|
> на самом деле я считаю, что привязывать все к именам каталогов нестоит.
Мне кажется что лучше сделать систему в которой названия каталогов будут
самоочевидными и не вызовут вопросов большинства пользователей владеющих
тонким искусством пользования англо-русским словарём ;)
> Лучше сделать это все настраиваемым.
Совершенно согласен. Для того я и предлагаю использовать ассигны вместо
абсолютных путей.
> Да хоть в bat-фойле можно все сделать.
Это нужно обдумать. Если вставлять такой фрагмент в system.bat, то нужно
написать программку, которая будет восстанавливать пути, если какой-нибудь
не в меру самоуверенный пользователь решит изменить там что-нибудь.
|
cr0acker (enthusiast)
2003/06/20 15:15
|
|
> Это нужно обдумать. Если вставлять такой фрагмент в system.bat, то нужно
написать программку, которая будет восстанавливать пути, если какой-нибудь
не в меру самоуверенный пользователь решит изменить там что-нибудь.
Дык можно сделать вотанавлювающий батничек:)
|
cr0acker (enthusiast)
2003/06/20 15:16
|
|
>Что ты собираешься размещать в спринтеровском "L" ?
А не важно что в нём хранить:) Главное что бы он был:) Мы его зарезирвируем как дефолтовую помойку для потоков:)
|
MacBuster (Registered Developer)
2003/06/21 12:50
|
|
> Мы его зарезирвируем как дефолтовую помойку для потоков :)
Я уже сказал что односимвольные пути применяться не должны, потому
что их будут путать с разделом диска или накопителем. Кроме того,
то что ты понимаешь под помойкой, представляет собой вовсе не путь,
а устройство. А про устройства мы не говорим.
|
MacBuster (Registered Developer)
2003/06/21 13:00
|
|
> Дык можно сделать вотанавлювающий батничек:)
Какой батничек ? Ты не понял: мы говорим лишь о структуре, каталоги не имеют абсолютной привязки, все пути к ним отноcительные. Так что необходимо написать полноценную программу, которая бы выводила названия переменных (и ассигнов) и предлагала указать путь для каждого из них. Кроме этого можно сделать автоматический поиск по всему винту для тех, кто мало понимает что, куда и зачем.
|
cr0acker (enthusiast)
2003/06/21 14:35
|
|
Я понял! Есть некая переменная среды указывающая на путь к каталогу:) Переменные вроде можно и батниском ставить:)
|
MacBuster (Registered Developer)
2003/06/23 09:49
|
|
> Переменные вроде можно и батниском ставить :)
Ничего ты не понял. У каждого пользователя рабочие каталоги могут находиться в РАЗНЫХ местах, как ты их собираешься ставить в .bat-файле не зная заранее их расположения ?
|
cr0acker (enthusiast)
2003/06/23 10:08
|
|
Через параметры:)
|
MacBuster (Registered Developer)
2003/06/23 10:32
|
|
> Через параметры:)
Нет слов. Лучше прекратим этот разговор и вернёмся к обсуждению структуры каталогов.
|
cr0acker (enthusiast)
2003/06/23 16:24
|
|
Я чё тут обсухдать то:)
|
Denis Parinov (Sprinter Team)
2003/06/25 02:56
|
|
>> Переменные вроде можно и батниском ставить :)
> Ничего ты не понял. У каждого пользователя рабочие каталоги могут находиться в РАЗНЫХ местах, как ты их собираешься ставить в .bat-файле не зная заранее их расположения ?
Вы помойму о разном говорите. Программисту и не нужно знать где у юзера чего лежит, это должно быть прописано при старте системы. Нужно лишь согласовать имена этих переменных и необходимые каталоги.
А сделать можно что-то вроде этого. ;-)
===========system.bat==============
@echo off
echo Please logon:
input.exe USERNAME Input your name:
system.exe /c %USERNAME%.bat
===========system.bat==============
-----------vasya.bat-------------
SET HOSTDRIVE=C:\VASYA
SET SOFTWARE=%HOSTDRIVE%\Apps
SET USERDATA=%HOSTDRIVE%\MyFiles
SET SYSDIR=%HOSTDRIVE%\SYSTEM
SET DRIVERS=%SYSDIR%\Drivers
SET FONTS=%SYSDIR%\Fonts
SET LIBRARY=%SYSDIR%\Libs
SET LICENSE=%SYSDIR%\Licenses
SET LOCALE=%SYSDIR%\Locales
SET LOG=%SYSDIR%\Logs
SET REGKEYS=%SYSDIR%\Reg-Keys
SET STARTUP=%SYSDIR%\StartUp
--------------------------------
|
MacBuster (Registered Developer)
2003/06/25 12:07
|
|
> Вы помойму о разном говорите.
Мне тоже так кажется.
> Программисту и не нужно знать где у юзера чего лежит
Совершенно верно, программисту только надо вместо абсолютного пути указать стандартный ассигн. Например, вместо "C:\System\Libs\" надо написать "Libs:". А где уж эти библиотеки лежат на самом деле (хоть в "X:\MySyztem\System\Shared\Libs\") ему вовсе незачем знать.
> Нужно лишь согласовать имена этих переменных и необходимые каталоги.
Именно.
|
Denis Parinov (Sprinter Team)
2003/06/26 01:20
|
|
+----------------+-------------------------------+
Variable : Default directory
+----------------+-------------------------------+
SOFTWARE : C:\SOFTWARE
SETTING : C:\SOFTWARE\SETTING
LICENSE : C:\SOFTWARE\SETTING\LICENSE
USERDATA : C:\MYFILES
LIBS : C:\LIBRARY
LOGS : C:\LOGS
TEMP : C:\TEMP
+----------------+-------------------------------+
Я тут подумал и мне кажется список можно сократить до примерно такого.
Дело в том, что возможность приложения самостоятельно, без разрешения пользователя ставить какие-то шрифты, драйвера и т.п. вещи, связанные с записью в системные каталоги, мне не очень нравиться. :) Надо чтобы как минимум была возможноть спросить пользователя "А оно ему надо?". Соответственно подобные операции лучше делать через API, а не прямым копированием в каталог.
|
MacBuster (Registered Developer)
2003/06/26 09:45
|
|
> Я тут подумал и мне кажется список можно сократить до примерно такого.
К вопросу о привязке к абсолютным путям ;) Я не хочу захламлять
корневой каталог. Кроме того на мой взгляд такая структура не логична.
Logs, Libs и Temp куда уместнее расположить внутри каталога Software.
> Дело в том, что возможность приложения самостоятельно, без разрешения
> пользователя ставить какие-то шрифты, драйвера и т.п.
О самостоятельности речь не идёт.
> Надо чтобы как минимум была возможноть спросить пользователя "А оно
> ему надо?".
Т.е. при установке и настройке текстового процессора, пользователь
должен будет думать о том стоит ли ему ставить шрифты, или поставить
всё кроме них, и удивляться куда его этот процессор посылает после
попытки открыть файл в котором используется стандартный, но не
установленный пользователем шрифт ? ;)
> Соответственно подобные операции лучше делать через API, а не прямым
> копированием в каталог.
Есть специальный класс программ предназначенный для установки ПО. К
примеру амижный Installer. Его задача проверить наличие устанавливаемых
компонентов, их версии, спросить разрешение пользователя на установку
и предупредить о возможных последствиях при отказе от их установки.
|
Denis Parinov (Sprinter Team)
2003/06/27 04:43
|
|
>> Я тут подумал и мне кажется список можно сократить до примерно такого.
> К вопросу о привязке к абсолютным путям ;) Я не хочу захламлять
корневой каталог.
Я полностью согласен и именно поэтому я настаивал на гибкой системе. Чтобы каждый мог настроить ее под себя. Я уверен найдутся люди которых не устроят оба приведенных варианта.
Например, кто-то может захотеть, разместить все программы на read-only диске, а %SETTING% перенаправить на read-write диск. Вариантов масса.
> Кроме того на мой взгляд такая структура не логична.
> Logs, Libs и Temp куда уместнее расположить внутри каталога Software.
Как мне кажется, из трех только Libs можно в какой-то мере отнести к Software. Хотя в общем это что-то среднее между System и Software. Лучше конечно чтобы библиотеками управляла система, но этого, к сожалению, пока нет. Что же касается Logs и Temp это в целом временные данные, различной ценности. Они могут находиться по большому счету много где.
>> Дело в том, что возможность приложения самостоятельно, без разрешения
>> пользователя ставить какие-то шрифты, драйвера и т.п.
> О самостоятельности речь не идёт.
ну автоматически, суть то одна и таже, должен быть сдерживающий фактор.
>> Надо чтобы как минимум была возможноть спросить пользователя "А оно
>> ему надо?".
> Т.е. при установке и настройке текстового процессора, пользователь
> должен будет думать о том стоит ли ему ставить шрифты, или поставить
Для тех кто не хочет думать, эту возможность можно сделать настраиваемой, но она должна быть.
> всё кроме них, и удивляться куда его этот процессор посылает после
> попытки открыть файл в котором используется стандартный, но не
> установленный пользователем шрифт ? ;)
:) Вылетать из-за отсутствия какого-то конкретного шрифта, когда у пользователя стоят другие стандартные, не есть хорошо. Я еще могу допустить подобное в игре, где шрифт нужен как часть оформления и то врятли.
>> Соответственно подобные операции лучше делать через API, а не прямым
>> копированием в каталог.
> Есть специальный класс программ предназначенный для установки ПО. К
> примеру амижный Installer. Его задача проверить наличие устанавливаемых
> компонентов, их версии, спросить разрешение пользователя на установку
> и предупредить о возможных последствиях при отказе от их установки.
Именно это я и имел ввиду. :) Только такой "Installer" должен стоять у человека, а не идти в комплекте с ПО.
Хотя может разумнее завести несколько вызовов в системе.
InstallSoftware(Title, Version, file)
InstallLibrary(Name, Version, file)
InstallDriver(Type, Device, Version, file)
InstallFont(Name, Family, , , file)
и т.п.
В этом смысле, installer программы может обращатся к системе:
InstallLibrary("PRINTF", 1.0, "printf.lib");
Система смотрит в своих записях, допустим уже стоит такая библиотека.
Система говорит "OK". При этом у пользователя ничего не спрашивают. И реально ничего нового не ставится.
Если же, такой библиотеки нет или используется более старая версия.
то система (если это включено) спрашивает пользователя "Приложение ProgName запрашивает разрешение на установку библиотеки PRINTF v1.0 (c) anycompany [Yes], [No], [Yes for all]?"
Если "Yes", то необходимый файл копируется, записи обновляются, программе говорят "OK".
Если "No", то программе говорят "NO" и она уже решает ставиться дальше или нет.
Если "Yes to all", то дальнейшие вызовы данной программы происходят без запросов пользователю.
Точно также поступать со шрифтами, драйверами и др. компанетами.
|
MacBuster (Registered Developer)
2003/06/30 11:28
|
|
> [...]
> Я полностью согласен и именно поэтому я настаивал на гибкой
> системе.
Хм. Я всего лишь предложил названия каталогов, их относительные пути для тех, которые асположены внутри других, и ассигны к ним. Всё обсуждение должно было свестись к простому анализу для того, что-бы выявить недостающие каталоги и ассигны. Абсолютные пути - последнее дело в этом обсуждении. Конкретизирую вопрос: каких каталогов и ассигнов в предложенной структуре не хватает ?
> [...]
> Как мне кажется, из трех только Libs можно в какой-то мере
> отнести к Software. Хотя в общем это что-то среднее между
> System и Software.
По-моему это исключительно системный компонент.
> Лучше конечно чтобы библиотеками управляла система, но этого,
> к сожалению, пока нет.
Да, с библиотеками и интерфейсом к ним надо разобраться до того, как они начут появляться в большом количестве. Т.е. самое время ;)
> [...]
> :) Вылетать из-за отсутствия какого-то конкретного шрифта, когда
> у пользователя стоят другие стандартные, не есть хорошо.
Речь не идёт о незапуске программы, а только о том, что пользователь увидит не то что задумывалось автором. Это наглядный пример.
> [...]
> Именно это я и имел ввиду. :) Только такой "Installer" должен стоять
> у человека, а не идти в комплекте с ПО.
Конечно. Например в AmigaOS и QNX такие программы поставляются вместе с файлами системы и всегда доступны любому ПО.
> Хотя может разумнее завести несколько вызовов в системе.
Не думаю. Вся установка сводится к элементарному копированию файлов из каталога/архива в стандартные ассигны. Куда проще ввести стандарт на способ размещения информации о номере версии файла (например, как это сделано в AmigaOS - есть стринг $VER:, за которым следует номер версии и дата создания программы в ASCII), и небольшую программу, которая эту версию проверяет, возвращая его в переменной среды, затем в скрипте установки происходит проверка того что эта программ возвращает и соответствующая реакция на это. Т.к. писать и "таскать с собой" целую программу только для установки, как делается в Windows, ненормально.
> [...]
> Система смотрит в своих записях, допустим уже стоит такая библиотека.
В каких записях ? Ведь если есть файл с таким именем в ассигне Libs:, то надо всего лишь проверить его версию.
|