我正在使用Py2exe将可执行文件创建为Windows服务。
当我运行脚本时,我收到此错误:
文件“C:\ TeamCity \ buildAgent \ work \ 582d895bd5b431ac \ winpython \ WinPython-32bit-2.7.3.3 \ python-2.7.3 \ lib \ site-packages \ py2exe \ build_exe.py”,第860行,在build_executable中 add_resource(ensure_unicode(exe_path),script_bytes,u“PYTHONSCRIPT”,1,True) RuntimeError:EndUpdateResource:访问被拒绝。
这是对py2exe的调用:
setup(
name = NAME,
description = DESCRIPTION,
version = '1.0.133.43',
service = [{'modules':["ServiceLauncher"], 'cmdline':'pywin32'}],
zipfile=None,
options = {
"py2exe":{"packages":"encodings",
"includes":"win32com,win32service,win32serviceutil,win32event",
"excludes":"libiomp5md.dll"
},
},
)
问题仅发生在构建计算机上,它在我的开发计算机上运行良好。
我尝试将完全控制设置为工作文件夹中的每个人,但它不起作用。
有什么想法吗?
谢谢。
答案 0 :(得分:37)
经过两天的调查,我们在IT人员的帮助下找到了解决方案。
当py2exe尝试修改添加元数据和\或图标的可执行文件时,会出现此问题。
根本原因?简单...... ANTIVIRUS。
它认为操作是威胁并导致访问被拒绝错误。
谢谢大家!
答案 1 :(得分:2)
问题可能是防病毒程序阻止了对.exe文件的写访问,正如其他人所指出的那样。如果您不能或不想禁用防病毒软件,则setup.py
文件开头的以下补丁将重命名该文件以避免在修改前.exe
扩展名,并在之后将其重命名。
import py2exe.py2exe_util
from py2exe.py2exe_util import add_resource
import os
def add_resource_patch(name, *arg, **kwarg):
name_tmp = name + '.tmp'
os.rename(name, name_tmp)
add_resource(name_tmp, *arg, **kwarg)
os.rename(name_tmp, name)
py2exe.py2exe_util.add_resource = add_resource_patch
from distutils.core import setup
import py2exe
setup(...)
答案 2 :(得分:1)
我发现断开与Internet的连接足以解决问题(尽管这可能与禁用所提出的防病毒解决方案有关)。
答案 3 :(得分:0)
另一个可能的解决方案是你已经有一个包含文件的dist文件夹 - 我做了(忘了我已经运行了py2exe)。删除了该文件夹,它再次起作用