Есть сервис Сервис (Служба) написанная на C# и есть приложение WPF с интерфейсом. Нужно как-то их "связать"
Есть некая задача, заключается она в том, чтобы из приложения WPF получать данные — выбранный интервал между резервной копией (1 час, 6 часов и т.д.) и пути папок — Начальной (Папка файлы из которой нужно скопировать) и конечная (куда будут копироваться файлы из начальной), эти данные должна получать служба и, после нажатия определенной кнопки в WPF, служба запускалась с заданными параметрами. Доступ к исходным кодам как сервиса, так и приложения WPF есть, осталось только "связать" их. Была идея сделать файл "save.txt" где будут храниться данные, из сервиса их читать, а для запуска сервиса, при нажатии кнопки запускать bat'ник, в котором будет прописан старт сервиса. Но мне кажется это костыль и это можно реализовать проще и лучше. Всё пишется на C# с .NET Framework 4
Подразумевается, что программа будет стоять на сервере и копировать, к примеру, логи на другой диск (или носитель), а с правами доступа проблем быть не должно, у сис админов есть доступ ко всему.
Ответы (1 шт):
Если правильно понял вашу задачу... То не нужно никаких батников, есть несколько вариантов:
- Сделать обычное приложение и закинуть его в автозапуск, которое прячет свое окно и висит в трее, и просто разворачиваете его и меняете настройки когда надо, а приложение свой планировщик держит в файле конфигурации, но это вариант если пользователь у компа один.
- В случае когда пользователей много - подобное приложение, без окна, а сам интерфейс в виде отдельного приложения подключается с приложению-службе и командами запускает функции и меняет конфигурацию.
- Не держать никакую службу-сервер, использовать встроенный "планировщик заданий" винды, там и таймеры готовые есть, и триггеры. Планировщик будет запускать пресловутый батник, а вы своей программой тупо менять содержимое батника и редактировать параметры задания планировщика.
- Сделать полноценную службу, и либо через внутренние команды (о которых я вам к сожалению не скажу) либо через сеть управлять службой.
Если выбираете одиночное приложение - всё очень просто, если сетевое - то можно отправлять/принимать команды/конфигурацию различными способами, могут подойти Socket или HTTPListener, тут подробнее что и как: https://metanit.com/sharp/net/3.2.php
Заведите класс конфигурации, например:
class ConfigBackup
{
public string SourceFolder { get; set; }
public string DestinationFolder { get; set; }
public int BackupIntervalHours { get; set; }
public DateTime LastCopyEntry { get; set; }
}
И сохраняйте/загружайте через формат Json.
Для этого подключите Nuget пакет: Newtonsoft.Json
Сохранение и загрузка соответственно:
using Newtonsoft.Json;
ConfigBackup cbackup = new ConfigBackup();
//сохранить:
string cfg = JsonConvert.SerializeObject(cbackup, Formatting.Indented);
File.WriteAllText("config.cfg", cfg);
//загрузить:
string cfg = File.ReadAllText("config.cfg");
cbackup = JsonConvert.DeserializeObject<ConfigBackup>(cfg);