【问题标题】:Access denied using Py2exe使用 Py2exe 拒绝访问
【发布时间】:2014-02-18 08:30:48
【问题描述】:

我正在使用 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"
        },
        },
    )

这个问题只出现在构建机器上,它在我的开发电脑上运行良好。

我尝试为工作文件夹中的每个人设置完全控制,但它不起作用。

有什么想法吗?

谢谢。

【问题讨论】:

  • 出于好奇,如果可能,请尝试使用较短的路径名。当 Windows 中的路径过长时,可能会出现奇怪的错误。
  • 错误可能不是访问文件系统上的特定文件,而是访问其他一些功能,例如注册表项或服务管理器设置(因为我注意到您使用的是ServiceLauncher,@ 987654323@等……)。您是否以管理员身份运行?
  • 我以管理员身份运行。我尝试了一条较短的路径,但没有运气......
  • 如何检查是否是注册表或服务管理器的问题?
  • 可以在“事件查看器”中检查您的 AUTH 日志,可能会很幸运。

标签: python windows-services py2exe


【解决方案1】:

经过两天的调查,我们在 IT 人员的帮助下找到了解决方案。

当 py2exe 尝试修改可执行文件添加元数据和\或图标时会出现问题。

根本原因?很简单……杀毒软件。

它认为该操作是一种威胁并导致访问被拒绝错误。

谢谢大家!

【讨论】:

  • 感谢您回答这个问题。我遇到了同样的问题,用谷歌搜索,找到了这个答案,禁用了防病毒软件,再次点击运行,一切都很好。总时间:1分钟。可能节省了我几个小时!
  • 如果您无法禁用防病毒软件,运行构建过程 (py2exe) 两次可能会有所帮助。它对我有用,因为它第一次构建 library.zip 并失败了。第二次,它能够构建可执行文件。
  • @syam 感谢您提及这个 =)
  • 完美答案!由于我的 AV 没有弹出任何警告/错误,我不会很快想到这一点
【解决方案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(...)

【讨论】:

  • 这对我有用,但没有其他方法。这也很好,因为它会永久修补问题并从我的流程中删除暂停和取消暂停步骤。
【解决方案3】:

我发现断开与 Internet 的连接足以解决问题(尽管这可能与禁用建议的防病毒解决方案有关)。

【讨论】:

    【解决方案4】:

    另一个可能的解决方案是你已经有一个包含文件的 dist 文件夹 - 我做过(忘记我已经运行了 py2exe)。删除了文件夹,它又可以工作了

    【讨论】:

    • 这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review
    • @FabioLamanna 我遇到了与作者类似的问题,这是一个对我有用的解决方案。对于其他可能会和我一样的人,如果他们看到这篇文章,这是一个很好的资源。
    【解决方案5】:

    如果您使用C:\Users 下的文件夹,可能会出现问题。 Windows 显然不喜欢它。只需从另一个文件夹运行pyinstaller(在将文件移动到另一个文件夹之后)。我将我的 python 脚本移到了C:\Temp 下,它就像一个魅力,在C:\Users 下,我遇到了同样的权限问题(即使cmd 以管理员用户身份运行)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-08
      • 2015-07-01
      • 2016-01-02
      • 2016-06-12
      • 2021-06-26
      • 2015-08-07
      • 2014-12-21
      相关资源
      最近更新 更多