将任意的应用程序作为 Windows 服务并解决 1053 错误

与 Linux 的 systemd 不同,并不是所有的应用程序都可以作为 Windows 服务。如果强行以服务形式启动某个不支持的应用程序,会得到“错误 1053: 服务没有及时响应启动服务和控制请求”。

注:如果你是一个开发人员,应当通过编程来满足成为 Windows 服务的条件,而不要使用本文的方法,可参考这篇文章这个例子

可以通过增加额外的代码来支持 Windows 服务。然而,如果我们无法获取软件的源代码,或者没有足够的代码能力,这条道路是行不通的。

微软在 Microsoft Windows Resource Kits 中提供了 instsrv.exe 和 srvany.exe 两个程序,可用来将任意程序作为 Windows 服务。顾名思义,instsrv.exe 的功能与 sc create 命令类似,而 srvany.exe 程序,则是一个响应 Windows 消息的一个“媒介”,它会间接启动我们需要的程序,并且向 Windows 报告服务的情况。

由于有更方便的 sc 命令,无需获得 instsrv.exe 程序,只需要获得 srvany.exe 即可。微软在 Microsoft Windows Resource Kits 中提供的 srvany.exe 文件是 32 位应用程序,如果在 64 位系统中运行 32 位程序,部分特殊文件夹和注册表会被重定向(如 System32 实际上是 SysWow64。但这并不意味着 32 位应用程序永远无法访问正确的资源,这可以通过特殊的 WinAPI 实现)。因此,需要 64 位的 srvany.exe,可从 GitHub 上获取一个开源的 srvany 实现

获取到合适的 srvany.exe 后,可将其放入与应用程序同一文件夹。然后继续剩余的步骤。

继续阅读

[官方] OI Packages v2016.11

因为NOI官网更新了一系列编程工具的版本号,所以OI Packages也随之更新。

包含组件
编译器:MinGW32 4.8.1、FPC 2.6.2
调试器:GDB 7.7.1
集成开发环境:Orwell Dev-C++ 5.9.2、Lazarus 1.0.12、Free Pascal IDE 2.6.2
测评工具:Cena 0.8.2
代码编辑器:Notepad2

特点
1.分为考场配置、练习配置、最小配置等组件选择方案,也可以自由选择组件
2.组件全部为NOI公布的对应版本的编程工具,最大限度接近真实竞赛环境
3.剔除了所有集成开发环境自带的编译器,全部共享同一个版本的编译器
4.傻瓜式安装,自动完成环境变量配置、编译器配置和集成开发环境配置,可用于大批量部署(静默安装参数:/SILENT)
继续阅读