gpt4 book ai didi

windows - 将 Cygwin 应用程序作为 Windows 服务运行

转载 作者:可可西里 更新时间:2023-11-01 11:43:33 29 4
gpt4 key购买 nike

我正在开发 WinDRBD ( https://github.com/LINBIT/windrbd ),它是 Linux DRBD 驱动程序到 Microsoft Windows 的端口。

我们希望将用户模式助手作为 Windows 服务运行(DRBD 有时使用 call_usermodehelper() 调用用户空间应用程序,我们通过守护进程模拟它,该守护进程从内核驱动程序检索这些请求,运行它们并将退出状态返回给内核)。

当我们在 cygwin shell 中运行守护进程时,一切正常。但是,当将守护程序作为 Windows 服务运行时,cygwin 似乎找不到其安装目录(在我的机器上是 C:\cygwin64)。

注册表项 (HKLM/Software/CygWin/setup/rootdir) 指向正确的位置,但我不确定它是否也可以被 Windows 服务访问?

/bin/sh 未被服务找到,但是/cygdrive/c/cygwin64/bin/sh存在,所以当我使用该路径运行 shell 时,它可以启动(并找到运行所需的 DLL)。然而壳提示:

bash.exe:警告:找不到/tmp,请创建!

以正常方式运行 cygwin 时肯定存在。

有没有人试过将 CygWin 编译的 EXE 作为 Windows 运行?服务?这是 sc 查询 windrbdum 的输出:

SERVICE_NAME: windrbdum 
TYPE : 10 WIN32_OWN_PROCESS
STATE : 4 RUNNING
(STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0

(um 用于用户模式)。

感谢您的任何见解,

  • 约翰内斯

最佳答案

正如 matzeri 所指出的,cygrunsrv 是在 Windows 下将 cygwin 二进制文件作为服务运行时的 cygwin 工具。它既可以作为包装器(执行特定于 Windows 的服务 API 和事件处理),也可以作为安装、删除、启动和停止服务的工具(这仍然可以通过 sc 实用程序来完成,如

sc start <servicename>

).

要安装服务 (I),请执行以下操作:

cygrunsrv.exe -I windrbdlog -p /cygdrive/c/windrbd/usr/sbin/windrbd.exe \
-a log-server \
-1 /cygdrive/c/windrbd/windrbd-kernel.log \
-2 /cygdrive/c/windrbd/windrbd-kernel.log

其中 windrbdlog 是服务的 Windows 名称,/cygdrive ... 是cygwin 应用程序的完整路径(无需编写任何 Windows 服务 API在那里调用,它只是一个 Cygwin/POSIX 可执行文件),log-server 是参数到二进制文件(所以正在启动的是 windrbd 日志服务器)和 -1 和 -2是 stdout 和 stderr 的重定向。正是我需要的,感谢 matzeri为我指点 cygrunsrv。

关于windows - 将 Cygwin 应用程序作为 Windows 服务运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52704903/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com