我在 Windows 7 中运行 Python 2.7,安装了 pywin32-216-win32-py2.7。我正在运行以下代码,它在一台计算机上运行良好,但在另一台计算机上输出错误(Win7、Py2.7、相同的 pywin 库)。
错误信息:
File "C:\Energy\Support Sheets\Kill Excel.py", line 9, in GetProcessID items, instances = win32pdh.EnumObjectItems( None, None, object, win32pdh.PERF_DETAIL_WIZARD ) error: (-1073738824, 'EnumObjectItems for buffer size', 'The specified object was not found on the computer.')
完整代码:
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!'
请您参考如下方法:
当进程性能计数器被禁用时,我遇到了同样的问题 - 显然这可能会发生。有说明here了解如何重新启用计数器。如果您无法在机器上安装软件,您可以运行 regedit 并搜索名为“Disable Performance Counters”的键并将其删除。
之后,您可能需要以管理员身份在 cmd shell 上运行“lodctr/R”以重新加载性能计数器,然后才能正常工作。
