递归火山软件开发平台

标题: 请求[ 服务类 ]添加[ 置服务启动类型 ] [打印本页]

作者: hrq520    时间: 2024-5-12 13:24
标题: 请求[ 服务类 ]添加[ 置服务启动类型 ]


  Windows服务有些会自动意外停止,

  便写了个服务状态监测恢复的小程序,

  但对[ 启动类型 ]为[ 已禁用 ]的服务使用[ 启动服务 ]并不起作用,

  需将[ 启动类型 ]改为[ 手动或自动启动 ]后才行,

  但目前火山的服务类,还没[ 置服务启动类型 ]的命令,

  拜托了!

   (, 下载次数: 216)

作者: 见性成佛    时间: 2024-5-13 09:39
我的服务也是常常给自动停止,估计是给sha,du软件搞的鬼. 有没有其它方法防别人程序停止的

作者: hrq520    时间: 2024-5-13 10:23
见性成佛 发表于 2024-5-13 09:39
我的服务也是常常给自动停止,估计是给sha,du软件搞的鬼. 有没有其它方法防别人程序停止的
...

被停止了  还能重新启动   被禁用了   重新启动都不行   

我都是定时检查指定服务的状态  一旦发现被停止  就 运行服务
作者: 见性成佛    时间: 2024-5-13 11:53
hrq520 发表于 2024-5-13 10:23
被停止了  还能重新启动   被禁用了   重新启动都不行   

我都是定时检查指定服务的状态  一旦发现被停 ...

可以这样搞,如果禁止了,删除服务再启动?
作者: hrq520    时间: 2024-5-13 14:54
见性成佛 发表于 2024-5-13 11:53
可以这样搞,如果禁止了,删除服务再启动?

这不好搞   重装服务   我是考虑过   但服务有些是指定用户账号和密码的  获取不到  就还原不了,最好还是直接 置服务启动状态,要不我也不发帖了
作者: server    时间: 2024-5-13 21:13
hrq520 发表于 2024-5-13 14:54
这不好搞   重装服务   我是考虑过   但服务有些是指定用户账号和密码的  获取不到  就还原不了,最好还 ...

亲亲宝子,你听说过双向监控,多向监控吗?
不过好像也不太行。
想搞你,你防不住,如果只是想简单保护的话,注册2个服务,互相监控,发现状态不对就修改并重启计算机。
你查查 netsh 命令吧,不懂的找    通义千问。

比较其他智障AIchat,越问越迷糊。
就问:windows C++ 环境下,服务程序 检测自身状态变化。
另外,不是有服务中止 这个 事件吗?

你直接不容许他结束,完了修改状态,重启。
作者: 见性成佛    时间: 2024-5-14 08:24
hrq520 发表于 2024-5-13 14:54
这不好搞   重装服务   我是考虑过   但服务有些是指定用户账号和密码的  获取不到  就还原不了,最好还 ...

搞二个服务试试。你怎么指定帐号和密码的么, 加扣扣交流下么, 我现在有一个服务,我是注入程序的
作者: yuangao    时间: 2025-3-25 16:22
本帖最后由 yuangao 于 2025-3-25 17:05 编辑

至今,还是没有
使用命令方式吧

sc config XXXX  star= demand
demand(手动) auto(自动) disabled(禁止)



作者: w5717    时间: 5 天前
本帖最后由 w5717 于 2025-3-30 18:55 编辑

https://wwtt.lanzn.com/iOanM2s55xcb
winsvc.h 文件要到火山库里自己找,这份代码是借鉴 AI 生成后修改的,我最近也是用到服务类,发现没有 置启动类型
作者: yuangao    时间: 4 天前
w5717 发表于 2025-3-30 18:51
https://wwtt.lanzn.com/iOanM2s55xcb
winsvc.h 文件要到火山库里自己找,这份代码是借鉴 AI 生成后修改的 ...

感谢,  老吴, 为什么不添加进去..
作者: w5717    时间: 4 天前
yuangao 发表于 2025-3-31 09:14
感谢,  老吴, 为什么不添加进去..

不知道,可能偷懒吧
作者: yuangao    时间: 4 天前
w5717 发表于 2025-3-31 09:51
不知道,可能偷懒吧
OpenSCManagerW  



<火山程序 类型 = "通常" 版本 = 1 />
方法 置启动类型 <公开 静态 类型 = 逻辑型 @禁止流程检查 = 真 @视窗.外部头文件 = "..\\um\\winsvc.h">
参数 服务名称 <类型 = 文本型>
参数 启动类型 <类型 = 变整数 注释 = "启动类型以下选项:2=自动;3=手动;4=禁用" @默认值 = 2>
{
    @ SC_HANDLE schSCManager = NULL;
    @ SC_HANDLE schService = NULL;
    @ BOOL bresult = FALSE;
    // 打开服务控制管理器数据库(使用W版本)
    @ schSCManager = OpenSCManagerW(NULL, NULL, SC_MANAGER_ALL_ACCESS);
    @ if (schSCManager != NULL)
    @ {
    @     // 直接传递宽字符服务名称(无需转换)
    @     schService = OpenServiceW(schSCManager, (LPCWSTR)@<服务名称>, SERVICE_CHANGE_CONFIG);
    @     if (schService != NULL)
    @     {
    @         // 调用W版本配置函数
    @         bresult = ChangeServiceConfigW(
    @             schService,
    @             SERVICE_NO_CHANGE,
    @             (DWORD)@<启动类型>,
    @             SERVICE_NO_CHANGE,
    @             NULL, NULL, NULL, NULL, NULL, NULL, NULL
    @         );
    @         CloseServiceHandle(schService);
    @     }
    @     else
    @     {
    @         // 调试时获取错误码
    @         // DWORD dwError = GetLastError();
    @     }
    @ }
    @ CloseServiceHandle(schSCManager);
    @ return bresult;
}
作者: w5717    时间: 4 天前
yuangao 发表于 2025-3-31 10:26
OpenSCManagerW  

牛比,我那个版本是抄的易语言过来的,x64x86都可以用,W版本的不知道通不通用了




欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4