我有一个服务监视器应用程序,它可以监视其他三个服务器应用程序的状态-你知道那些绿色,红色状态的东西,启动,停止等。
问题是,即使用户是管理员,它也会在Windows7中显示错误的状态。
start、stop按钮被禁用,而install按钮被启用,状态颜色为灰色,这也是错误的。启动按钮应该是启用的,服务状态显示为绿色-应用程序正在运行。
如果应用程序在设置为“以管理员身份运行”的情况下运行,则它的行为正常。
这个应用程序是用Delphi7编写的,在其他版本的Windows上运行得很好。下面这行代码:
OpenSCManager(PChar(sMachine), Nil, SC_MANAGER_ALL_ACCESS);在Win7下总是返回0,这会导致问题。
除了“以管理员身份运行”之外的任何想法和任何解决方法。
发布于 2010-04-06 14:39:32
如果请求受限访问,则可以在不需要管理员权限的情况下打开服务管理器。下面这行代码:
ManagerHandle := OpenSCManager(nil, SERVICES_ACTIVE_DATABASE,
SC_MANAGER_ENUMERATE_SERVICE);使用服务管理器打开活动服务的数据库,即使从受限用户帐户使用也是如此。然后,返回的句柄可用于调用EnumServicesStatusEx()以获取有关正在运行的服务的信息。
将SC_MANAGER_ALL_ACCESS作为dwDesiredAccess参数传递意味着传递SC_MANAGER_CREATE_SERVICE,正如文档所述:
只有具有管理员权限的
进程才能打开可由CreateService函数使用的数据库句柄。
因此,如果你将你的程序限制为标准用户可以执行的操作,那么你的代码应该可以在Windows 7上运行而不做任何更改。其他所有事情都需要由安装程序完成,或者由一个特殊的程序运行。
这是BTW对Windows 7的新要求,您的声明
这个应用程序是用Delphi7编写的,可以在其他版本的视窗系统中完美运行。
仅显示您从未在操作系统的早期版本中的受限帐户上正确测试应用程序。在Windows NT中(大约20年前),不允许受限用户以完全访问权限打开服务管理器,因此代码在那里同样会失败。
https://stackoverflow.com/questions/2582293
复制相似问题