Python win32pdh.EnumObjectItems调用错误

Python win32pdh.EnumObjectItems调用错误,python,pywin32,Python,Pywin32,我正在Windows7中运行Python 2.7,安装了pywin32-216-win32-py2.7。我正在运行以下代码,它在一台计算机上运行正常,但在另一台计算机上输出错误(都是Win7、Py2.7、同一个pywin库) 错误消息: GetProcessID中第9行的文件“C:\Energy\Support Sheets\Kill Excel.py” items,instances=win32pdh.EnumObjectItems(无,无,对象,win32pdh.PERF_DETAIL_向导

我正在Windows7中运行Python 2.7,安装了
pywin32-216-win32-py2.7
。我正在运行以下代码,它在一台计算机上运行正常,但在另一台计算机上输出错误(都是Win7、Py2.7、同一个pywin库)

错误消息:

GetProcessID中第9行的文件“C:\Energy\Support Sheets\Kill Excel.py” items,instances=win32pdh.EnumObjectItems(无,无,对象,win32pdh.PERF_DETAIL_向导) 错误:(-1073738824,“缓冲区大小的EnumObjectItems”,“在计算机上找不到指定的对象”。)

完整代码:

import win32api, win32con
import win32pdh
import os
import signal
import time

def GetProcessID( name ) :
    object = "Process"
    items, instances = win32pdh.EnumObjectItems( None, None, object, win32pdh.PERF_DETAIL_WIZARD )
    val = None
    if name in instances :
        hq = win32pdh.OpenQuery()
        hcs = [ ]
        item = "ID Process"
        path = win32pdh.MakeCounterPath( ( None, object, name, None, 0, item ) )
        hcs.append( win32pdh.AddCounter( hq, path ) )
        win32pdh.CollectQueryData( hq )
        time.sleep( 0.01 )
        win32pdh.CollectQueryData( hq )

        for hc in hcs:
            type, val = win32pdh.GetFormattedCounterValue( hc, win32pdh.PDH_FMT_LONG )
            win32pdh.RemoveCounter( hc )
        win32pdh.CloseQuery( hq )
        return val

def Kill_Process_pid(pid):
  handle = win32api.OpenProcess(win32con.PROCESS_TERMINATE, 0, pid) #get process handle
  win32api.TerminateProcess(handle, -1) #kill by handle
  win32api.CloseHandle(handle)        #close api

def Kill_Process(name):
    pid = GetProcessID(name)
    if pid:
        try:
            Kill_Process_pid(pid)
            return True
        except:
            pass
    else:
        return False

# MAIN FUNCTION
print 'Killing Excel instances...',
while Kill_Process('EXCEL'):
   time.sleep(0.2)
print 'Done!'

当进程性能计数器被禁用时,我也遇到了同样的问题——显然这可能会发生。有关于如何重新启用计数器的说明。如果无法在计算机上安装软件,可以运行regedit并搜索名为“禁用性能计数器”的键,然后将其删除


之后,您可能需要以管理员身份在cmd shell上运行“lodctr/R”以重新加载性能计数器,然后它才能工作。

您的语言环境是英语吗?否则,对象名称的拼写可能会有所不同。