wxPython и py2app, ошибка CreateActCtx 0x00000008 (недостаточно места на диске) - PullRequest
1 голос
/ 28 августа 2010

Я разрабатывал приложение, которое использует wxPython в качестве графического интерфейса библиотеки и py2exe, чтобы я мог легко распространять его, однако я только что протестировал py2exe, и при запуске исполняемого файла появляется следующая ошибка.

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: Хм, возможно, первый из них - просто предупреждение.

Ответы [ 2 ]

2 голосов
/ 01 сентября 2010

Это означает, что обычные элементы управления не загружаются.Вторая ошибка может быть результатом первой ошибки, которая не является фатальной, и программа продолжает работать.

попробуйте сначала:

(опция «Не связывать») и проверьте, появляется ли проблема по-прежнему,Обычно это должно работать.

bundle_files = 3 

попробуйте следующее:

Поскольку вы используете опцию комплектации 1, вы можете проверить, какая DLL-библиотека времени выполнения MSVC находится в каталоге dist рядом с исполняемым файлом.Я бы посоветовал вам также узнать все файлы MSVCRXX.dll на вашем компьютере и посмотреть, есть ли проблемы с версией

0 голосов
/ 13 октября 2010

Оказалось, что # 1 было просто предупреждением, а # 2 был исправлен с помощью явного модуля include

...