ドライブ文字と CDROM のステータスをチェックするだけの小さなコード (より大きなプログラムの一部) があります。
import wmi
print '--checkCDContent--'
c=wmi.WMI()
cdrom = c.Win32_CDROMDrive()
status = cdrom[0].MediaLoaded
drive = cdrom[0].Drive
print drive, status
大きなプログラムの一部として、cxFreeze を使用してコードをコンパイルし、exe を作成する必要があります。私の問題をテストするために、上記のコードを単独で使用して再現しました。
ハード ドライブから .exe を実行すると、正しく実行されます。CD自体から実行すると(私の最終目標)、次のエラーが表示されます
X:\>CDrun.exe
--checkCDContent--
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\cx_Freeze\initscripts\Console.py", line 27, in <module>
exec code in m.__dict__
File "CDrun.py", line 6, in <module>
File "C:\Python27\lib\site-packages\wmi-1.4.9-py2.7-win32.egg\wmi.py", line 1145, in __getattr__
return self._cached_classes (attribute)
File "C:\Python27\lib\site-packages\wmi-1.4.9-py2.7-win32.egg\wmi.py", line 1156, in _cached_classes
self._classes_map[class_name] = _wmi_class (self, self._namespace.Get (class_name))
File "C:\Python27\lib\site-packages\wmi-1.4.9-py2.7-win32.egg\wmi.py", line 783, in __init__
if namespace:
File "C:\Python27\lib\site-packages\wmi-1.4.9-py2.7-win32.egg\wmi.py", line 1145, in __getattr__
return self._cached_classes (attribute)
File "C:\Python27\lib\site-packages\wmi-1.4.9-py2.7-win32.egg\wmi.py", line 1156, in _cached_classes
self._classes_map[class_name] = _wmi_class (self, self._namespace.Get (class_name))
File "<COMObject winmgmts:>", line 3, in Get
File "C:\Python27\lib\site-packages\win32com\client\dynamic.py", line 272, in _ApplyTypes_
result = self._oleobj_.InvokeTypes(*(dispid, LCID, wFlags, retType, argTypes) + args)
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, u'SWbemServicesEx', u'Not found ', None, 0, -2147217406), None)
私が疑うのは、CD のステータス更新を取得しようとしているのと同時にコードが CD から実際に実行されているため、このエラーが発生していることです。誰でもこれを検証して解決策を提案できますか?