Windows 7:如何从命令行停止/启动服务(像 services.msc 那样)?

Windows 7:如何从命令行停止/启动服务(像 services.msc 那样)?

我用 Java 开发了一个程序,它使用本地 SQL Server 实例来存储其数据。在某些安装中,SQL Server 实例有时不运行。

用户可以通过手动启动 SQL Server 实例(通过 services.msc)来解决此问题。

我正在考虑自动执行此任务:软件将检查数据库服务器是否可以访问,如果不能,则尝试(重新)启动它。问题是,在同一个用户帐户上,可以通过 services.msc(没有任何 UAC 提示)停止/启动服务,但不能通过(非提升的)命令行停止/启动服务。

操作系统似乎对 services.msc 有不同的看法:

c:\>sc start mssql$db1

[SC] StartService:OpenService 错误 5:
拒绝访问 (拒绝访问)

 c:\>net start mssql$db1

系统故障 5 次。访问被拒绝 (Access denied)

所以问题是:如何才能从 java 程序/命令行停止/启动服务,而无需我的用户使用 services.msc(最好通过 on-board-tools)

答案1

在标准 Windows 7 设置中,如果您以非提升权限的管理员身份运行“services.msc”,它将作为提升权限的进程启动(完整性级别为“高”)。

这就是您可以使用 services.msc 来启动和停止服务的原因。

在 Vista 中,您会收到 UAC 提示。在 Windows 7 中,Microsoft 稍微软化了 UAC,使其不那么烦人。Windows 假定您想以提升权限运行 services.msc,因为以非提升权限运行它实际上没有任何意义。

您可以将 Win7 UAC 设置更改为“始终通知”,现在如果您打开 services.msc,您将收到 UAC 提示。

所有这些并不能真正帮助您解决问题,如果用户无法打开提升的命令提示符来使用“sc”或“net start”,他/她将无法启动服务。

在您的安装批处理中,检查它是否以提升的方式运行,如果不显示消息或启动提升的提示并让用户处理 UAC 对话框。

答案2

也许您可以使用sc.exe。请参阅这篇 MSDN 文章了解详情。

相关内容