【问题标题】:Windows program doesn't run when started using sc create使用 sc create 启动 Windows 程序时不运行
【发布时间】:2015-10-21 18:48:19
【问题描述】:

我创建了一个程序,它应该作为 Windows 服务运行,在启动时自动启动。

我还创建了一个启动器,它应该创建一个服务然后停止。

Starter 以管理员身份运行。

我从一开始就调用这个系统命令:

system("sc create MyApp binpath= /*full path*/ type= own start= auto DisplayName= MyService");

system("sc start MyApp");

然后 Windows 说服务创建成功。

但是,应该作为服务运行的程序却无法启动!

执行“sc start”命令后,控制台暂时无任何显示,任务管理器显示“正在启动”,稍后控制台显示

"Error 1053: The service did not respond to the start or control request in a timely fashion".

我尝试运行这样的命令,显示在 StackOverflow 上的另一篇文章中:

sc create SERVICENAME binPath= "**cmd /c** c:\programlocation\program.exe"

但是,它说:

StartService Failed 2: The system cannot find the file specified.

所以**cmd /c** 东西不起作用。

如何让它工作,请只使用 Windows 原生工具,不要使用外部程序。

【问题讨论】:

  • cmd /c 是完全错误的顺便说一句。您需要查看事件查看器/向服务添加一些诊断日志以查看它有什么问题
  • 那么这是一个实际编写为 Windows 服务的程序,还是只是一个普通的 ole' .EXE,您希望它作为 Windows 服务运行?无论如何,您的问题似乎很可能出在程序的实际代码中,而您却没有表现出来。
  • 尝试 notcmd /c 部分包含在** ** 之间...
  • 你在哪里找到binPath=cmd /c?因为在没有任何情况下这是有意义的,如果有一个 SO 答案说它确实需要被删除,或者至少被否决而被遗忘。 :-)

标签: c++ windows cmd system


【解决方案1】:

可以做这样的事情:

Native C++ Windows Service

但我会切换到 C++/CLI 并从 C# 移植以下代码示例:

System.ServiceProcess.ServiceProcessInstaller

或者,更好的是,只需在 C# 中编写代码的 Windows 服务部分……这比在 C++ 中编写自己的代码要容易得多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-22
    • 2017-04-09
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 2015-09-16
    • 1970-01-01
    • 2011-05-26
    相关资源
    最近更新 更多