解决system error caught. error code=1073, m essage = CreateService failed: unknown error

本文介绍了一个在安装Redis过程中遇到的错误:系统错误被捕捉,错误代码为1073,详细信息为CreateService失败,未知错误。并提供了解决该问题的链接。

安装redis报错信息:

[9204] 15 Jun 11:41:44.516 # HandleServiceCommands: system error caught. error code=1073, message = CreateService failed: unknown error


解决方法http://www.yayihouse.com/yayishuwu/chapter/1297



<think>嗯,用户遇到了错误代码1073,特别是在使用CreateService失败时。我需要先理解这个错误的具体原因。根据之前的经验,错误代码1073通常与Windows服务相关,可能涉及权限问题或者服务配置错误。记得用户提到SystemError和HandleServiceCommands,可能是在处理服务命令时出现了问题。首先,我应该检查用户是否有足够的权限。安装服务通常需要管理员权限,所以如果用户没有以管理员身份运行程序,可能会导致1073错误。另外,服务名称是否有效?服务名不能包含特殊字符,长度也有限制,可能需要检查是否符合规范。然后,服务可能已经存在或者残留。如果之前安装过同名的服务,没有正确卸载,再次安装时会失败。这时候需要先用sc delete命令清理旧的服务实例。此外,防病毒软件或系统安全策略有时会阻止服务安装,临时禁用这些可能有助于排查问题。引用中提到使用AT命令来运行任务,这可能与权限有关,但用户的问题是关于CreateService失败。需要确认服务的二进制路径是否正确,以及依赖的账户是否有权限。比如,如果服务配置为使用特定用户账户,但该账户密码错误或权限不足,也会导致安装失败。 另外,查看系统日志和应用程序日志可以提供更详细的错误信息,帮助定位问题。用户可能需要检查事件查看器中的相关条目。代码层面,确保调用了StartServiceCtrlDispatcher正确,并且服务入口点函数处理了所有控制命令,避免服务控制管理器超时。可能还需要考虑服务的描述符和权限设置,确保没有安全描述符配置错误。如果用户使用的是自定义的服务基类,比如CServiceBase,需要确认其正确继承了必要的函数,并处理了所有初始化步骤。 总结一下,解决方案应包括检查权限、服务名称有效性、清理旧服务、检查二进制路径、账户权限、安全软件干扰,以及代码中的服务初始化和控制处理。同时,建议用户查看日志获取更多线索,并分步骤验证每个可能的原因。</think>关于Windows服务错误代码1073CreateService失败)的解决方案,以下是分步排查指南: ### 核心原因分析 错误代码1073通常表示服务控制管理器在初始化服务时遇到超时或权限问题,常出现在以下场景: 1. 服务未正确响应`StartServiceCtrlDispatcher`调用[^2] 2. 服务二进制路径配置错误 3. 服务账户权限不足(特别是使用LocalSystem账户时的交互式权限) 4. 残留服务注册表项未清理干净 ### 具体解决方案 #### 1. 验证服务初始化代码 确保服务入口函数正确处理控制请求: ```cpp // 服务主函数示例 void WINAPI ServiceMain(DWORD argc, LCHAR* argv[]) { g_StatusHandle = RegisterServiceCtrlHandler(SVCNAME, ServiceCtrlHandler); // 必须在2秒内设置服务状态 ReportSvcStatus(SERVICE_RUNNING, NO_ERROR, 0); } ``` #### 2. 检查安全描述符 使用`SC_SDDL`参数设置正确的安全权限: ```powershell sc sdset MyService D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA) ``` #### 3. 清理残留服务 通过命令提示符(管理员)执行: ```cmd sc queryex MyService sc stop MyService sc delete MyService ``` #### 4. 处理交互式服务权限 对于需要桌面交互的服务: ```cpp // 在服务配置中设置 SERVICE_REQUIRED_PRIVILEGES_INFO privInfo; privInfo.pszRequiredPrivileges = SE_INTERACTIVE_LOGON_NAME; ChangeServiceConfig2(hService, SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO, &privInfo); ``` #### 5. 验证服务账户权限 通过组策略编辑器(gpedit.msc)配置: ``` 计算机配置 -> Windows设置 -> 安全设置 -> 本地策略 -> 用户权限分配 确认以下权限: - 作为服务登录 - 替换进程级令牌 ``` ### 特殊场景处理 当使用AT命令创建服务时: ```cmd AT 14:00 /INTERACTIVE cmd.exe ``` 需确保: 1. 任务计划程序服务正在运行 2. 启用`Allow service to interact with desktop`[^3] ### 调试建议 1. 使用Process Monitor监控注册表和服务控制管理器交互 2. 检查系统事件日志(事件ID 7023/7000) 3. 使用`sc qc MyService`验证服务配置
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值