gpt4 book ai didi

delphi - Win-7下列出服务及服务状态

转载 作者:行者123 更新时间:2023-12-03 15:22:45 24 4
gpt4 key购买 nike

我有一个服务监视器应用程序,用于监视其他三个服务器应用程序的状态 - 你知道那些绿色、红色状态的东西、启动、停止等。

问题在于,即使用户是管理员,它在 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 上运行。其他一切都需要由安装程序或运行提升权限的特殊程序来完成。

顺便说一句,这是 Windows 7 没有新要求,您的声明

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

仅表明您从未在早期版本的操作系统中的有限帐户上正确测试过该应用程序。对于 Windows NT(大约 20 年前),受限用户不允许以完全访问权限打开服务管理器,因此代码同样会失败。

关于delphi - Win-7下列出服务及服务状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2582293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com