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

Windows services Windows UPS(不间断电源)服务-是否关闭UPS?,windows-services,ups,Windows Services,Ups,我正在使用UPS服务从应用程序监视我的UPS的状态——HKLM\SYSTEM\CCS\Services\UPS\Status上的键包含您可以从电源控制面板获得的所有信息。但是--我也希望能够告诉UPS关闭我的应用程序。我知道该服务可以告诉UPS关机——例如,在使用电池运行一段时间后——我想知道是否有某种命令可以发送给该服务手动启动关机 我在搜索这些信息时遇到了麻烦——人们往往会拼错“不间断”(hrm,Firefox红线,但没有其他选择)而“UPS”只会在配送服务中被点击。也许我可以通过Syste

我正在使用UPS服务从应用程序监视我的UPS的状态——HKLM\SYSTEM\CCS\Services\UPS\Status上的键包含您可以从电源控制面板获得的所有信息。但是--我也希望能够告诉UPS关闭我的应用程序。我知道该服务可以告诉UPS关机——例如,在使用电池运行一段时间后——我想知道是否有某种命令可以发送给该服务手动启动关机

我在搜索这些信息时遇到了麻烦——人们往往会拼错“不间断”(hrm,Firefox红线,但没有其他选择)而“UPS”只会在配送服务中被点击。也许我可以通过System.ServiceController或WMI做些什么

澄清:是的,我说的是关闭物理UPS设备的电源。我知道如何停止服务。我想这可能是一个常见的问题——我希望我的UPS在PC机上关闭。我有一个想法,我将尝试,基于。你看,APC(和其他所有人)必须提供一个DLL供UPS服务调用,而且因为函数调用都有很好的文档记录,所以我没有理由不能P/调用它们。一旦我知道它是否有效,我将重新编辑它


更新:我尝试调用UPSInit,然后UPSTurnOff,但什么也没发生。我会再做一些修改,但是直接调用apcups.dll可能是一条死胡同。

请告诉我,你想用什么语言来做这件事。。。如果您使用的是.NET,那么可以使用ServiceController类(阅读文档)

用于使用C/C++控制Win32 API中的服务

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

请注意,您需要在hServMgr中提供服务管理器句柄,\\UPS\u Service\u 0名称必须与所需的UPS服务(Windows内置或其他)匹配

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

希望有帮助


关于关闭物理UPS设备,我记得在WIn98的几天里,我能够通过COM端口关闭设备与UPS通话,尽管我不记得品牌或编程界面如何。

查看我对Herman的评论,你想关闭UPS,而不是UPS服务,对吗?我是说,你想让它关掉,切断电源,等等,对吗

如果是这样,您可以在UPS-by-UPS模型上查看它。我怀疑他们中的两个会起同样的作用

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

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

从和APC的人交谈中学到的。他们很好,而且乐于助人。现在,我想你只要发布一个来自你的PowerSleet软件的URL,它就会直接与UPS对话,并执行你的命令。

好的,我有答案(经过测试!),但它并不漂亮。我的APC UPS使用()进行通信。在我的例子中,您需要的是一个“软关机”、“S”命令。但首先,您需要确保它处于“智能”模式(“Y”)。现在,如果您想让Windows UPS服务监视状态,该服务将牢牢抓住COM端口。因此,您可以a)让Windows服务关闭UPS,或b)关闭服务并自行关闭UPS

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

  • 切断公用事业(电源)电源
  • 等待Windows UPS服务超时(默认值,至少2分钟)
  • 等待Windows关闭--在接近结束时,它将发送“S”命令
  • 等待UPS宽限期,在此宽限期后,它将自动关闭

我认为我们将选择(a),因为(b)涉及到额外的工作,包括终止服务和实现串行通信。

我认为他的意思是他想关闭UPS。。不是UPS服务。编码员,如果我错了就纠正我。。您是想停止UPS服务,还是想通过代码实际关闭UPS(从而失去电源)?对不起,是的,他是想关闭物理UPS!我没有找到那个问题的答案。然而,许多UPS系统可以通过COM1或USB端口进行控制。
OpenService (hServMgr, TEXT("\\UPS_SERVICE_0"), SC_MANAGER_ALL_ACCESS);

SERVICE_STATUS stat;
ControlService (hUpsService, SERVICE_CONTROL_STOP, &stat)