当Python脚本作为Win32服务启动时,导入cx_oracle失败
我写了一个Python脚本,想让它作为Windows服务运行,方法是继承win32serviceutil.ServiceFramework
。在这个脚本中,我使用了cx_oracle
模块。
当我以调试模式运行服务(python DLOGprod.py debug
)时,一切都正常。但是当我尝试启动服务(python DLOGprod.py start
)时,导入cx_oracle
模块时出现了错误:
导入cx_Oracle时出错:DLL加载失败:找不到指定的模块。
我用依赖查看工具看了一下cx_oracle.pyd
文件,发现缺少两个DLL文件MSVCR90.DLL
和IESHIMS.DLL
。
我的环境设置如下:
- Python 2.6.6
- pywin32-214
- cx_oracle_5.0.4-11g
任何帮助都非常感谢。
mark
1 个回答
1
我解决了我的问题。根本原因是我只把Oracle客户端软件的路径添加到了用户的PATH变量中。现在把它添加到系统的PATH变量中后,一切都正常了。
为了解决这个问题,我按照以下步骤进行了排查:
- 下载了一个叫做进程查看器的工具,链接是http://www.microsoft.com/technet/sysinternals/utilities/filemon.mspx
- 用sc queryex [服务名称]命令找到了我的服务的PID
- 在进程查看器中根据PID进行了过滤
- 发现pythonservice.exe找不到OCI.dll
- 在我的系统中搜索OCI.dll
到这个时候,一切都明白了。
mark