将 UNIX 守护程序移植到 Windows 服务

Posted

技术标签:

【中文标题】将 UNIX 守护程序移植到 Windows 服务【英文标题】:Porting a UNIX daemon to a Windows Service 【发布时间】:2022-01-19 20:48:12 【问题描述】:

我用 C 语言编写了一个 UNIX 守护程序,我想将它移植到 Windows。 我的目标是 Windows 10。

当我搜索如何创建 Windows 服务时,我遇到了 approach using .NET and C#,我都想不惜一切代价避免。

如何在 C 语言中创建一个简单直接的服务,而不需要 Microsoft 试图卸载我的厨房水槽?如果真的需要,我会考虑 C++,但 C# 和 .Net 太过分了。

如果在 VisualStudio 之外更容易,我也可以切换到不同的编译器。 (目前我使用的是 Visual Studio 2019,最新更新。)

注意:我的 Linux 守护程序只有一个依赖项:可用于 Windows 的 libhidapi。

更新

没有可用的 C++ 模板。

【问题讨论】:

我不认为你可以。这些太不一样了。您将需要以 Windows 方式重写功能。 @EugeneSh。好,谢谢!一个小的 C 程序不是以前在 Windows 下的方式吗,pre dot Net? @EugeneSh。用 C 语言为 Windows 编写服务并不难——如果我可以访问很久以前为客户编写的框架,我会发布答案。服务启动的方式有点不同——IIRC 它不是来自main(),甚至不是微软的main() 的任何“供应商锁定”版本。从CreateService() function 开始构建您的服务。此外,还有更多示例:google.com/… @AndrewHenle 我没有说难,我说它和Linux/Unix有很大的不同,所以直接移植会是一个挑战 我在前世(大约 1999 年)为 NT 写过服务……我可以做一些探索并尝试记住它是如何工作的。给我几天时间。 【参考方案1】:

这归结为创建两个不同的应用程序 (.exe)

使用StartServiceCtrlDispatcher() 运行服务,其中调度函数调用RegisterServiceCtrlHandlerEx() 注册控制器。

使用CreateService()安装服务

可以跳过安装程序,并为此使用sc 命令行实用程序,它是操作系统的一部分。

见full example。

【讨论】:

以上是关于将 UNIX 守护程序移植到 Windows 服务的主要内容,如果未能解决你的问题,请参考以下文章

.NET Core 中的跨平台后台服务(想想 windows 服务/unix 守护进程)?

将音乐播放器守护程序 (MPD) 移植到 Android

如何将 RPC XDR 从 UNIX 移植到 Windows? [关闭]

将socket程序从linux移植到windows上

将 Unix 套接字移植到 Windows [关闭]

SpringBoot技术专题教你如何开发一个”可移植“的轻量级文件服务项目系统!