2010-08-28 66 views
1

我一直在开发一个应用程序,它使用wxPython作为GUI库和py2exe,以便我可以轻松分发它,但是我刚才测试了py2exe和启动可执行文件时出现以下错误。wxPython和py2app,CreateActCtx错误0x00000008(没有足够的磁盘空间可用)

12:13:08: Debug: src/helpers.cpp(140): 'CreateActCtx' failed with error 0x00000008 (Not enough disk space available.). 
Traceback (most recent call last): 
    File "eYoutubeMacros3.py", line 1, in <module> 
    File "zipextimporter.pyo", line 82, in load_module 
    File "application\application.pyo", line 5, in <module> 
    File "zipextimporter.pyo", line 82, in load_module 
    File "application\backend\backend.pyo", line 4, in <module> 
    File "zipextimporter.pyo", line 82, in load_module 
    File "application\backend\extractor.pyo", line 5, in <module> 
    File "zipextimporter.pyo", line 82, in load_module 
    File "twisted\web\client.pyo", line 17, in <module> 
    File "zipextimporter.pyo", line 82, in load_module 
    File "twisted\web\error.pyo", line 188, in <module> 
ImportError: cannot import name resource 

导致错误的src/helpers.cpp功能是

static ULONG_PTR wxPySetActivationContext() 
{ 

    OSVERSIONINFO info; 
    wxZeroMemory(info); 
    info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); 
    GetVersionEx(&info); 
    if (info.dwMajorVersion < 5) 
     return 0; 

    ULONG_PTR cookie = 0; 
    HANDLE h; 
    ACTCTX actctx; 
    TCHAR modulename[MAX_PATH]; 

    GetModuleFileName(wxGetInstance(), modulename, MAX_PATH); 
    wxZeroMemory(actctx); 
    actctx.cbSize = sizeof(actctx); 
    actctx.lpSource = modulename; 
    actctx.lpResourceName = MAKEINTRESOURCE(2); 
    actctx.hModule = wxGetInstance(); 
    actctx.dwFlags = ACTCTX_FLAG_HMODULE_VALID | ACTCTX_FLAG_RESOURCE_NAME_VALID; 

    h = CreateActCtx(&actctx); 
    if (h == INVALID_HANDLE_VALUE) { 
     wxLogLastError(wxT("CreateActCtx")); 
     return 0; 
    } 

    if (! ActivateActCtx(h, &cookie)) 
     wxLogLastError(wxT("ActivateActCtx")); 

    return cookie; 
} 

而且最后我对py2exe代码

setup(
    console = [self.target], # Contains some build info, is this is relevant I'll add it 
    zipfile = 'library.dat', 
    options = { 
     'py2exe' : { 
      'bundle_files' : 1, 
      'dll_excludes' : ['w9xpopen.exe'], 
      'optimize'  : 2, 
      'dist_dir'  : '../dist/executables/', 
      'compressed' : True, 
      #'excludes'  : ['doctest', 'pdb', 'unittest', 'difflib', 'inspect'], 
     } 
    } 
) 

编辑:是第二个错误似乎是从扭曲但我怀疑这会导致第一个错误。 Edit2:嗯,也许第一个只是一个警告。

+0

是你能够尝试我给出的解决方案。 – pyfunc 2010-09-01 16:49:55

回答

0

原来#1只是一个警告,#2固定有一个明确的模块包括

2

这意味着常用控件的东西不会加载。第二个错误可能是第一个非致命错误导致程序继续运行的结果。

先试:

(不要捆绑选项),并检查问题是否仍然出现。这通常应该起作用。接下来

bundle_files = 3 

尝试:

,因为你正在使用捆绑选项1,您可以检查哪些MSVC运行时DLL位于沿侧dist目录的可执行文件。我建议你也找出所有MSVCRXX.dll你的机器上,并看看是否有版本问题

+0

我不得不明确包含资源类,并使其正常启动。现在我需要做的就是弄清为什么这个应用看起来像是在win98上运行。即使使用DLL,清单嵌入也会崩溃。 – 2010-09-02 08:18:08

+0

你也包括crt dll吗? 请参阅http://msdn.microsoft.com/en-us/library/ms235291.aspx – pyfunc 2010-09-02 08:36:03

+0

我对CreateActCtx有相同的警告,但只有在GUI2Exe中将“Exe Kind”设置为“console”时才会出现。如果编译为“windows”,那么即使使用bundle_files = 1,此警告也会消失。 – otterb 2013-10-08 16:26:47

相关问题