Wine错误:应用程序试图创建窗口,但无法加载驱动程序

Wine错误:应用程序试图创建窗口,但无法加载驱动程序,wine,winelib,Wine,Winelib,我制作了一个fcgi-isapi桥,我使用wineg++(关键字winelib)编译它。它使用LoadLibrary/GetProcAddress运行纯Win32 isapi扩展。这适用于简单的演示isapi dll,但不适用于更复杂的演示,wine会在dll中的某个地方崩溃WINEDEBUG=+olerelay,+storage,+relay提供以下输出: 0009:Call KERNEL32.InterlockedIncrement(00000150) ret=1001eebe 0009:C

我制作了一个fcgi-isapi桥,我使用
wineg++
(关键字winelib)编译它。它使用
LoadLibrary
/
GetProcAddress
运行纯Win32 isapi扩展。这适用于简单的演示isapi dll,但不适用于更复杂的演示,wine会在dll中的某个地方崩溃
WINEDEBUG=+olerelay,+storage,+relay
提供以下输出:

0009:Call KERNEL32.InterlockedIncrement(00000150) ret=1001eebe
0009:Call KERNEL32.UnhandledExceptionFilter(0033f428) ret=7bc8e2f5
wine: Unhandled page fault on write access to 0x00000150 at address 0x7b8716bd (thread 0009), starting debugger...
Application tried to create a window, but no driver could be loaded.
Make sure that your X server is running and that $DISPLAY is set correctly.
couldn't load main module (0)
0009:Ret  KERNEL32.UnhandledExceptionFilter() retval=00000000 ret=7bc8e2f5
Unhandled exception: page fault on write access to 0x00000150 in 32-bit code (0x7b8716bd).
Register dump:
 CS:0023 SS:002b DS:002b ES:002b FS:0063 GS:006b
 EIP:7b8716bd ESP:0033f8cc EBP:0033f8e0 EFLAGS:00010246(  R- --  I  Z- -P- )
 EAX:00000001 EBX:00000000 ECX:00000000 EDX:00000150
 ESI:0033f8fc EDI:0033f8d4
Stack dump:
0x0033f8cc:  7bc6592e 00000150 00000000 7ca3c7d4
0x0033f8dc:  00000000 0033fdc8 7b823b61 7b8be9d4
0x0033f8ec:  000102d1 0033f8f4 1001eebe 00000150
0x0033f8fc:  7ef82158 7ca3c7d0 f775d2c8 0033faac
0x0033f90c:  7bcd7208 00000000 f775c2b1 0000000f
0x0033f91c:  7bcbbed8 1004e06c 00000002 00115760
Backtrace:
=>0 0x7b8716bd in kernel32 (+0x616bd) (0x0033f8e0)
  1 0x7b823b61 in kernel32 (+0x13b60) (0x0033fdc8)
  2 0x7ef813d0 (0x0033fe18)
  3 0x7ef815f5 (0x0033fe60)
  4 0x7b85e84c in kernel32 (+0x4e84b) (0x0033fe78)
  5 0x7b85f903 in kernel32 (+0x4f902) (0x0033feb8)
  6 0x7bc77600 (0x0033fed8)
  7 0x7bc7a59d (0x0033ffa8)
  8 0x7bc775de (0x0033ffc8)
  9 0x7bc4c65e (0x0033ffe8)
(使用Wine 1.4.1和1.6.2进行测试,两者的输出完全相同(只是一些不同的数字)

我的问题是:

  • 到底发生了什么?我如何才能找出页面错误的原因
  • wine是尝试运行图形调试器还是dll本身尝试创建X11对象?为什么失败?此安装在64位主机上的32位chroot环境中运行,但我调用了
    xhost+
    ,并使用
    xlogo
    gedit
    甚至使用wine的Win32 GUI应用程序测试了X11。没有似乎没有任何X11问题
  • 更新:这里是指向源代码的链接:

    根据此链接,
    wine
    用于图形程序。若要在没有图形界面的情况下运行程序,请改用
    wineconsole
    ,例如

    wineconsole fastcgi-to-isapi.exe
    
    请参阅:

    或者使用X虚拟帧缓冲区,请参见:。

    尝试

    wineconsole --backend=curses fastcgi-to-isapi.exe
    
    如前所述:

    Wine有三个选项可以在命令行模式下运行应用程序:

    • 在裸linux控制台上(wine)
    • 在linux控制台上使用curses(wine wineconsole--backend=curses)
    • 在win32窗口中(wine wineconsole--backend=user)
    对于wineconsole,用户后端是默认的,这就是为什么 命令行试图打开一个窗口

    但是,它不会打印程序的输出。如果需要输出,可以先在交互模式下启动wineconsole,然后从那里运行exe:

    me@mycomputer:~$ wineconsole
    Microsoft Windows 6.1.7601 (3.0)
    
    Z:\home\me> HelloWorld.exe
    Hello World!
    

    显然不是一个好的解决方案,如果你想用编程方式来做。

    Win EndoBub也抱怨应用程序试图创建窗口。exe是你编译VisualStudio的C++控制台项目模板时所得到的。