#windows #architecture #filesystems #file-storage
Вопрос:
Я попытался объяснить, как работает этот проект, чтобы дать лучшее представление о том, что именно мне нужно, но tl;dr:
Где обычные пути для хранения программных файлов, выходных файлов программ, журналов отладки программ и как их правильно запускать без входа пользователя, не сталкиваясь с проблемами с разрешениями на Windows Server 2019/Windows 10?
Я разрабатываю проект для компании, в которой я работаю, который предполагает связь с несколькими различными проприетарными машинами, с их собственным методом связи (все они по локальной сети в виде пакетов TCP/UDP) — в результате мне приходится писать разные программы для работы с каждым из них.
Программы написаны — далеко не законченные, но функциональные. Я нахожусь на этапе, когда я хотел бы развернуть его на целевой хост — машине как правильно установленное приложение Windows-очень самодельное, но, по крайней мере, полупрофессионально выглядящее.
Что делает программа:
- Взаимодействует с разными машинами, чтобы собирать статистику с каждой из них и сохранять их в виде CSV-файлов для интеграции с другим приложением (сторонним, а не моим собственным).
- При экспорте CSV имя файла добавляется в первую строку файла конфигурации (обычный текстовый файл).
- Файл конфигурации содержит другие биты информации, такие как smtp-сервер и данные учетной записи электронной почты, которые используются приложением электронной почты для автоматической отправки содержимого CSV по электронной почте программному обеспечению другой третьей стороны. Он также (в настоящее время) содержит путь к местоположению экспорта, корневой путь, в котором я храню все исполняемые файлы и различные биты статической информации о машинах, а именно строки данных с IP — адресом, являющимся последней строкой для каждой из них, из которой можно определить пользовательское имя, которое они дали машине, и другие соответствующие биты необходимой информации для моих различных программ.
- И ASP.NET сборка веб — api, с помощью которой третья сторона может отправлять данные для обработки моих программ, размещенных в IIS.
- Генерирует текстовые файлы журнала отладки, которые я использую для выявления проблем с моим кодом, которых много, и, используя файл конфигурации, сохраняет их в указанном месте (я вернусь к этому).
Also a couple other minor things, but the majority of the contents other than listed are not relevant to my question.
I know roughly that the program files should be (surprise, surprise) in the %ProgramFiles% folders.
At this stage we do not know yet where specifically the third party that will work with my exports wants the exports to be placed, so for now (and in the future) I’d like the path to be variable — my config file allows that.
The config file is jank. No questions, however I am wholly inexperienced (obviously) with these things as a fresh college graduate who was never formally taught any of this.
So I learned the hard way that Windows likes its permissions and I cannot edit the config file if its stored in the program files — outside of the user profile anywhere, really, not without admin privileges — so I store the config file and all the debugs within %appdata% at the moment.
The exports are currently saved to documents, while I’m developing and testing the program, which the email java applet grabs using the config file and extracts the contents and emails using the smtp and account info.
All of this is as messy as it sounds, but the functionality is required — it’s the purpose of this project. I couldn’t find a better way to handle the communication other than using C , which is a language I had no experience with at all, so the program was developed as I learned the language.
But I digress — I have everything in a mostly functional state. I have no idea how to create an installer, advice on that front would be nice too, but that’s not what this post is about.
What is the correct structure in which I should place my program files, my config file that is altered by the running programs constantly, and the debug files, also altered constantly?
The programs must be running on boot, whether a user is logged on or not, so another little program I created, which would be the main UI for users, prompts them for the details of whatever machine they want to poll (now and in the future), and based on which type it is, it creates a batch file that runs the corresponding program with CLI arguments and creates a task scheduler entry. This is the only bit that requireAdministrator due to Task Scheduler’s requirements.
The task is run as SYSTEM — consequently, %appdata% is «C:WindowsSysWOW64configsystemprofileappdataroaming» . SysWOW64 for 32bit release or System32 for 64bit release. This is very clearly inconvenient and breaks a lot of things due to permission issues.
Я приношу извинения за свою неопытность, я делаю все возможное в этом проекте — для которого я не переоценивал себя, мой менеджер точно знает, что я могу и не могу сделать, но я искренне хочу добиться успеха. Я потратил много часов на поиск в Google, что привело меня к тому, где я сейчас нахожусь, но по какой-то причине соглашение о размещении файлов для разных нужд-это то, что я не могу найти в Google, и мой курс «Мусор» не счел нужным учить нас (бакалавр в CS).
Я не ожидаю, что незнакомые люди в Интернете будут выполнять мою работу за меня, так что не беспокойтесь о беспорядке структур программ, я сам во всем разберусь, все, с чем я действительно столкнулся, — это вопрос tl;dr.
Заранее всем вам спасибо!