代码之家  ›  专栏  ›  技术社区  ›  ronaldosantana

在Win-7下列出服务和服务状态

  •  4
  • ronaldosantana  · 技术社区  · 16 年前

    问题是,即使用户是管理员,它也会在Windows7中显示错误的状态。

    如果应用程序以“以管理员身份运行”的设置运行,则其行为正常。

    这个应用程序是用delphi7编写的,在Windows的其他版本中运行得非常好。 这行代码:

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

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

    1 回复  |  直到 16 年前
        1
  •  8
  •   mghie    16 年前

    如果请求有限的访问权限,则可以在不需要管理员权限的情况下打开服务管理器。这行代码:

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

    EnumServicesStatusEx() 获取有关正在运行的服务的信息。

    经过 SC_MANAGER_ALL_ACCESS 作为 dwDesiredAccess 参数表示传递 SC_MANAGER_CREATE_SERVICE ,如文件所述:

    只有具有管理员权限的进程才能打开CreateService函数可以使用的数据库句柄。

    顺便说一句,这不是Windows7的新要求

    这个应用程序是用delphi7编写的,在Windows的其他版本中运行得非常好。

    仅显示您从未在早期版本的操作系统中的有限帐户上正确测试应用程序。在windowsnt已经存在的情况下(大约20年前),有限的用户不被允许打开具有完全访问权限的服务管理器,因此代码同样会在那里失败。

    推荐文章