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

Windows UPS(不间断电源)服务-关闭UPS?

  •  1
  • Coderer  · 技术社区  · 16 年前

    我正在使用UPS服务从一个应用程序监视我的UPS的状态——位于hklm\system\ccs\services\ups\status的键具有从电源控制面板获得的所有信息。但是——我想告诉UPS也要关闭我的应用程序。我知道服务可以告诉UPS关闭——例如,在用电池运行一组分钟之后——我想知道是否有某种命令可以发送给服务来手动启动关闭。

    我在搜索这些信息时遇到了困难——人们往往会拼写错误“不间断”(hrm,firefox红色的行,但没有其他选择),而“ups”只会受到运输服务的影响。也许我可以通过System.ServiceController或WMI做些什么?

    澄清:是的,我说的是关闭物理UPS设备的电源。我知道如何停止服务。我觉得这是一个常见的问题——我想让我的UPS和电脑一起关闭。我有一个想法,我要尝试,基于 this page . 你看,apc(和其他所有人)必须提供一个dll来让ups服务调用,而且由于函数调用有很好的文档记录,所以我没有理由不能p/invoke它们。一旦我知道它是否有效,我会重新编辑它。

    更新:我尝试调用upsinit,然后upstturnoff,但什么都没有发生。我会再修改一些,但是直接调用apcups.dll可能是一个死胡同。

    3 回复  |  直到 12 年前
        1
  •  2
  •   GEOCHET S.Lott    16 年前

    查看我对赫尔曼的评论,你想关闭UPS,而不是UPS服务,对吗?我是说,你想让那东西关掉,切断电源,等等,对吗?

    如果是这样,您将在UPS by UPS型号上查看它。我怀疑他们中的两个也能起到同样的作用。

    在搜索中,请尝试“apc”或“battery”,而不是UPS。我认为很多代码是笔记本电脑上运行的,用来处理电池等问题。

    有些地方隐藏在一些尘土飞扬的旧文件中,我有APC UPS的协议信息,它们的响应命令,以及它们发送到PC的内容等。但这是我们以前用串行电缆将UPS连接到我们的计算机时的做法…你可以用qmodem或hyperterrm与UPS通话…

    从和APC的人交谈中了解到。他们很好,很有帮助。现在,我认为你只是发布了一个来自PowerSlipe软件的URL,它将直接与UPS对话,并执行你的命令。

        2
  •  1
  •   Coderer    16 年前

    好的,我有答案(测试!)但是不漂亮。我的APC UPS使用 APC "Smart" protocol ( more here )在我的例子中,您需要一个“软关闭”、“S”命令。但首先你需要确保它处于“智能”模式(“Y”)。现在,如果您想让Windows UPS服务监控状态,该服务将在COM端口上有一个铁把手。因此,您可以a)让Windows服务关闭UPS,或者b)自行关闭服务并关闭UPS。

    在收到“S”命令后,UPS本身有一个“宽限期”,给您时间关闭操作系统。这意味着要做到上述(a)点,你必须:

    • 切断电源
    • 等待Windows UPS服务超时(默认和最少2分钟)
    • 等待Windows关闭--就在最后,它将发送“s”命令
    • 等待UPS宽限期,之后它将自动关闭。

    我认为我们会选择(a),仅仅是因为(b)需要额外的工作来终止服务和实现串行通信。

        3
  •  -1
  •   Hernán    16 年前

    拜托,告诉我你想用什么语言…如果您使用的是.NET,那么您可以使用ServiceController类(读取文档)来实现这一点。

    用C/C++控制Win32 API中的服务 Service Functions (Windows) .

    例如,要停止服务,您可以使用如下ControlService函数(这是一个快速而肮脏的示例):

    OpenService (hServMgr, TEXT("\\UPS_SERVICE_0"), SC_MANAGER_ALL_ACCESS);
    
    SERVICE_STATUS stat;
    ControlService (hUpsService, SERVICE_CONTROL_STOP, &stat)
    

    请注意,您需要在hservmgr中提供一个服务管理器句柄,并且\\ups\u service\u 0 name是必须与所需的UPS服务(Windows内置或其他)匹配的名称。

    记住,要停止服务,您需要适当的安全权限。这不是管理帐户的问题,但请记住使用非管理帐户登录时会发生什么。

    希望有帮助。

    关于关闭物理UPS设备,我记得在Win98年的时候,我通过COM端口关闭了与UPS通话的设备,尽管我不记得品牌或编程接口是如何的。

    推荐文章