2010-08-28 67 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

相關問題