win32pdh.EnumObjectItems ошибка вызова - PullRequest
2 голосов
/ 19 января 2012

Я использую Python 2.7 в Windows 7 с установленным pywin32-216-win32-py2.7.Я запускаю следующий код, и он отлично работает на одном компьютере, но выдает ошибку на другом (оба Win7, Py2.7, та же библиотека Pywin).

Сообщение об ошибке:

Файл "C: \ Energy \ Support Sheets \ Kill Excel.py", строка 9, в элементах GetProcessID, instance = win32pdh.EnumObjectItems (нет, отсутствует, объект, win32pdh.PERF_DETAIL_WIZARD):размер буфера ',' Указанный объект не найден на компьютере. ')

Полный код:

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!'

1 Ответ

1 голос
/ 01 марта 2012

У меня была такая же проблема, когда счетчик производительности процесса был отключен - очевидно, это может произойти.Здесь есть инструкции здесь о том, как заново включить счетчики.Если вы не можете установить программное обеспечение на машину, вы можете запустить regedit, найти ключи, называемые «Отключить счетчики производительности», и удалить их.

После этого вам может потребоваться запустить «lodctr / R»Командная оболочка в качестве администратора для перезагрузки счетчиков производительности, прежде чем она заработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...