Каковы бест практикс структуры каталогов и файлов программы в Windows?

Возможно я просто плохо гуглю, но я не могу найти ни одного материала где описывается структура программ в виндовс на уровне каталогов и файлов. Куда устанавливать программу? Каковы различия Programs Files от AppData и зачем в appdata roaming, local и local low?
Как лучше хранить temp файлы?
И каковы бест практикс во внутренней структуре программы?
Хранить dll и pictures в своих отдельных папочках и exe в корне или всё в корень? Как тут обычно делают разработчики?

Буду очень благодарен если вы меня закидаете ссылками на материалы.(английским не брезгую)
  • Вопрос задан
  • 704 просмотра
Решения вопроса 1
@res2001
Developer, ex-admin
Например тут: https://en.wikipedia.org/wiki/Directory_structure
Встречал похожий более подробный документ где-то на сайте микрософта, но сейчас не нашел.
Если кратко:
1.программу ставить в "Program Files" в соответствии с платформой. Внутренняя структура исполняемых файлов и библиотек - на ваше усмотрение. Если вы используете кучу динамических библиотек, то есть смысл разнести их по подкаталогам. Если у вам только небольшая кучка - могут лежать в одном каталоге. Это на самом деле не важно и никому не интересно.
2.Общие настройки программы, которые распространяются на всех пользователей: в реестр в HKLM и/или в ProgramData.
3.Пользовательские настройки программы: в реестр в HKCU и/или в AppData.
4.Пользовательские временные файлы: в %TEMP%
5.Файлы проектов или сохранения: в %USERPROFILE%\Documents
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
Griboks
@Griboks
Для всех платформ правила одинаковые - кидаете куда попало, как вам больше нравится.
Самый сок - это кидать скрытые файлы кешей и архивов в системные папки на ssd без возможности переноса. А поскольку у вас Windows, то must-have для крутого разработчика - засорить реестр, контекстное меню и панель быстрого запуска.
Некоторые особо продвинутые ещё умудряются свои службы встроить под системным пользователем (якобы анти-читы, драйвера и в таком духе, но мы то знаем правду...).
Временные файлы лучше хранить в специальном каталоге для временных файлов. Но успешные компании предпочитают создавать свои скрыте файлы/каталоги без права пользователю на удаление. Некоторые гении предпочитают вовсе не хранить временные файлы, а каждый раз закачивать их из интернета (не зря же придумали кеш). Ещё лучше - выдавать ошибку без подключения к интернету, а весь интерфейс сделать удалённым через какой-нибудь electron.
Ну и конечно же всё остальное встраивается в exe, а сам exe шифруется. А то мало ли кто-то захочет иконку поменять без спроса или видео автозапуска удалит.
Ответ написан
Комментировать
Best-practice определяется технологией доставки и установки, и некоторыми системными соглашениями. В Microsoft Docs полно инфы об этом, вот например на странице Windows Installer: https://docs.microsoft.com/en-us/windows/win32/msi...

MSIX-пакеты ставятся в другое место, а контейнеризованные приложения хранят данные немного в другой раскладке. Вот короткий обзор: https://docs.microsoft.com/en-us/windows/msix/desk...

Разбирайтесь с конкретной технологией (MSI vs MSIX), и всё найдете. И умоляю вас, не пытайтесь писать собственный установщик и самостоятельно копировать файлы в Program Files или куда там вы собрались. Ничем хорошим это не заканчивается, плюс убьёте кучу времени зря (ну если конечно вы не горите особым желанием это сделать, только тогда не показывайте никому).
Ответ написан
Комментировать
@Drno
AppData - системная скрытая папка юзера. Используется прогами обычно только для темп файлов.
ProgramFiles - обычная папка, созданная по умолчанию для установки программ.
Темп файл лучше хранить в appdata - потом удалять.

Остальное не подскажу, не разраб. Но мне как пользователю удобно когда файлы проги разбиты на подпапки. Типа - bin,music,data... а exe в корне
Ответ написан
Комментировать
profesor08
@profesor08
Самое первое и самое важное правило - подчищай за программой весь мусор. Как только уяснишь это правило, то можешь раскидывать файлы где надо. Программу в program files, пользовательские данные в users.
Ответ написан
Комментировать
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Windows compatibility logo

Ищите на сайте msdn там описано все
Реестр в общем лучше не использовать
Настройки храните или в app.config или в базе SQLite
Насчёт файлов длл храните рядом с исполнимым файлом GAC лучше не использовать
Плагины и расширения в отдельной папке
Изображения и ресурсы тоже
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы