delphi – 列出Win-7下的服务和服务状态

delphi – 列出Win-7下的服务和服务状态,第1张

概述我有一个服务监视器应用程序,监视其他三个服务器应用程序的状态 – 你知道那种绿色,红色状态的东西,启动,停止等. 问题是即使用户是管理员,它在Windows 7中也显示错误的状态. 启动,停止按钮被禁用并启用安装按钮,状态颜色为灰色,这也是错误的.应启用启动按钮,服务状态显示为绿色 – 应用程序正在运行. 如果应用程序使用“以管理员身份运行”设置运行,则表明其运行正常. 该应用程序是用Delphi 我有一个服务监视器应用程序,监视其他三个服务器应用程序的状态 – 你知道那种绿色,红色状态的东西,启动,停止等.

问题是即使用户是管理员,它在Windows 7中也显示错误的状态.

启动,停止按钮被禁用并启用安装按钮,状态颜色为灰色,这也是错误的.应启用启动按钮,服务状态显示为绿色 – 应用程序正在运行.

如果应用程序使用“以管理员身份运行”设置运行,则表明其运行正常.

该应用程序是用Delphi 7编写的,在其他版本的windows中运行良好.
这行代码:

OpenSCManager(PChar(sMachine),Nil,SC_MANAGER_ALL_ACCESS);

永远在Win7下返回0,导致问题.

任何想法,如果可能的话,除了“以管理员身份运行”之外的任何解决方法.

解决方法 如果请求有限访问权限,则无需管理员权限即可打开服务管理器.这行代码:

ManagerHandle := OpenSCManager(nil,SERVICES_ACTIVE_DATABASE,SC_MANAGER_ENUMERATE_SERVICE);

即使在受限用户帐户中使用,也会使用服务管理器打开活动服务的数据库.然后可以使用返回的句柄调用EnumServicesStatusEx()以获取有关正在运行的服务的信息.

传递SC_MANAGER_ALL_ACCESS作为DWDesiredAccess参数意味着传递SC_MANAGER_CREATE_SERVICE,并且文档说明:

Only processes with administrator privileges are able to open a database handle that can be used by the CreateService function.

因此,如果您将程序限制为可由标准用户执行的 *** 作,那么您的代码应在windows 7上无需更改即可运行.其他所有内容都需要由安装程序或运行提升的特殊程序完成.

这是BTW没有新的要求windows 7,你的声明

The application is written in Delphi 7 and works perfectly in other versions of windows.

仅显示您从未在早期版本的 *** 作系统中在有限帐户上正确测试应用程序.使用windows NT(近20年前),不允许有限用户以完全访问权限打开服务管理器,因此代码将在那里失败.

总结

以上是内存溢出为你收集整理的delphi – 列出Win-7下的服务和服务状态全部内容,希望文章能够帮你解决delphi – 列出Win-7下的服务和服务状态所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1251320.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存