我创建了一个fcgi-isapi桥,我用wineg++
(关键字winelib)编译。它使用LoadLibrary
/ GetProcAddress
运行纯粹的Win32 isapi扩展程序。这适用于简单的演示isapi dll,但不适用于更复杂的版本,其中葡萄酒在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测试,两者都给出完全相同的输出(只有一些不同的数字)
我的问题:
xhost +
并使用xlogo
,gedit
测试X11,甚至使用Wine的Win32 GUI应用程序。似乎没有任何X11问题。更新:此处是指向来源的链接:http://gist.github.com/daald/5f37de8352e1c8ca62db
答案 0 :(得分:0)
根据此post,wine
适用于图形程序。要在没有图形界面的情况下运行程序,请使用wineconsole
代替,例如
wineconsole fastcgi-to-isapi.exe
答案 1 :(得分:0)
尝试
wineconsole --backend=curses fastcgi-to-isapi.exe
如this post所述:
Wine有三个选项可以在命令行模式下运行应用程序:
- 在裸露的Linux控制台上(葡萄酒)
- 在带有curses的Linux控制台上(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!
如果您要通过编程方式进行操作,显然不是一个好的解决方案。