我正在为应用程序编写更新程序。我需要删除旧文件,因为它们正在运行。这工作正常,直到我点击我正在使用的DLL文件。由于各种原因,我必须将_ssl
已编译的库与我的发行版捆绑在一起。
我首先释放了库,无论出于什么原因需要两次调用才能实际删除句柄(我假设某些地方有重新计算)。在此之后,我尝试删除该文件。这导致Python死于0xC0000005
,这显然是一个非常宽泛的退出代码。
import ssl
import ctypes
import _ctypes
print "Unloading SSL Module"
ssl_filename = ssl._ssl.__file__
dll = ctypes.CDLL(ssl_filename)
if ssl_filename.endswith("pyd"):
_ctypes.FreeLibrary(dll._handle)
_ctypes.FreeLibrary(dll._handle)
else:
_ctypes.dlclose(dll._handle)
_ctypes.dlclose(dll._handle)
print "Deleting current version..."
os.remove(ssl_filename)
print "Success"
执行后,我得到以下内容:
Unloading SSL Module
__builtin__ C:\path\to\_ssl.pyd 0 Deleting current version...
Process finished with exit code -1073741819 (0xC0000005)
我期待的是代码删除文件并继续正常。