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 FEHLER 5:
Zugriff verweigert(拒绝访问)

  c:\>net start mssql$db1 

Systemfehler 5 aufgetreten。 Zugriff verweigert(拒绝访问)

所以问题是:我怎样才能停止/从一个Java程序/命令行启动服务,而不让我的用户使用services.msc(最好通过板载工具)

在一个标准的Windows 7设置中,如果运行'services.msc'作为非高级pipe理员,它将作为高级进程启动(完整性级别为“高”)。

这就是为什么你可以使用services.msc启动和停止服务。

在Vista中,你将得到一个UAC提示。 在Windows 7中,微软稍微软化了UAC,使其不那么讨厌。 Windows假设你想运行services.msc提升,因为它没有真正有意义的运行它没有提升。

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

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

在设置批处理中,检查是否运行提升,如果不显示消息或启动提升提示并让用户处理UAC对话框。

也许你可以使用sc.exe命令设置正确的权限。 有关详细信息,请参阅此MSDN文章 。