время у меня порядка 20 сервисов написанных на с++ и на с# работают под Windows и все они "живут" в Windows services. Есть желание переписать сервисы с# на rust-е. Где потом мне эти сервисы хостить ?
что такое windows services?
Войдите в Таск мэнжджер под Виндов. Вкладка Службы. Там увидите список активных Сервисов - Служб.
ну это же просто вызов пары системных функцй для регистрации. То что сишарп/плюсцы автоматом компиляют с поддержкой этой ерунды не значит что руками нельзя сделать. Возможно есть уже готовые либы. Если нет надо писать
значит и растовые сервисы можешь там хостить
Либы хз, но вот просто биндиги к win32 api я видел. Этого должно быть достаточно.
нет, недостаточно. там базовые типы есть которые осуществляют регистрацию/удаление, старт/стоп джобы и т.п. Но ничего невозможного в том что написать это нет офк
нужен аналог вот такого: https://github.com/SublimeText/Pywin32/blob/master/lib/x32/win32/lib/win32serviceutil.py#L747
я не в курсе, а на виндовых сервисах обязательно сам процесс должен что-то там дергать и так далее? Нельзя сделать аля по аналогии с systemd: сделать простое описание сервиса в текстовом файле и зарегистрировать его в системе?
нет, нельзя сделать просто. бинарь сам себя должен зарегать в сервисной системе и передать как его зовут, и т.п. через FFI вызов
А кто запрещает написать бинарник-хелпер, который себя куда надо регистрирует, а потом подпроцессом запускает нужную программу?
по-моему там надо ещё коллбеки правильно регистрировать но это не точно. Я никогда так низко не спускался: работал через готовые интерфейсы где ты просто наследуешь утил-класс где всё есть и просто определяешь onstart/onstop
Конечно можно контейнер самописный для приложений раст написать. Но как то это не системно получается. Зоопарк. Здесь службы виндовс стандартные работают, здесь самописный контейнер с каким нибудь Рестом для управления раст-приложениями (старт, стоп, рестарт, апдэйт), здесь "рыбу заворачиваем" ☺ .
а по пути глядишь и докер перепишешь на раст - красота же!
Точно и очень задорога Продашь ☺
Получается кроме как под с++ переписать выхода нет ?
не понял вопроса, честно говоря
Вот и решена проблема отсутствия биндов под сервисы винды
Сервисы, которые на с# написаны, переписать на с++. Но у меня эти сервисы на С# Refleсtion активно юзают. Так что засада ...
https://github.com/rozanski/srvstart
// кхкхкхкостылькх
хех. изначально у тебя желание именно на ржаст переписать было. Кажется, что в твоём случае по имеющимся данным просто вообще ничего трогать не надо и оставить свои шарповые сервисы как есть. Нечего бесполезным RIIR на ровном месте заниматься
Если ничем нетривиальным на рестарте заниматься не надо, то сойдёт
Ну хочется же новые технологии пощупать в действии, а не хеллоу ворлд на расте в Консоли запускать и при этом ощущать себя Наполеном ...
тогда непонятно, зачем переписывать на С++ вместо раста
https://crates.io/crates/windows Сами m$ft поддерживают крейт с биндингами ко всему что только есть в winapi
О, нифигасе. Пркльна. А хорошо поддерживают, или как всегда у них?)
Ну, эти биндинги автоматически сгенерированы по некоторому описанию, как и для других языков
Для этого есть крейт https://crates.io/crates/shawl
Обсуждают сегодня