Webbrowser控件中的Java小程序会破坏标准格式

Webbrowser控件中的Java小程序会破坏标准格式,java,winapi,applet,webbrowser-control,atl,Java,Winapi,Applet,Webbrowser Control,Atl,我在应用程序/流程中使用IE WebBrowser控件。它是通过在Windows上的32位应用程序中运行ATL实现的 此进程使用GetStdHandle&ReadFile从stdin读取数据 每当WebBrowser控件使用java小程序呈现页面时,例如,此页面上的小程序:,java引擎中的某些内容正在关闭stdin句柄 结果是ReadFile返回FALSE,GetLastError返回ERROR\u PIPE\u break 我尝试使用SetHandleInformation来防止关闭句柄,它

我在应用程序/流程中使用IE WebBrowser控件。它是通过在Windows上的32位应用程序中运行ATL实现的

此进程使用GetStdHandle&ReadFile从stdin读取数据

每当WebBrowser控件使用java小程序呈现页面时,例如,此页面上的小程序:,java引擎中的某些内容正在关闭stdin句柄

结果是ReadFile返回FALSE,GetLastError返回ERROR\u PIPE\u break

我尝试使用SetHandleInformation来防止关闭句柄,它应该成功了,但句柄仍然断开

我需要stdin来工作,因为这是我与呼叫过程的通信通道

我确实找到了解决这个问题的办法,但不知道是否有更好的解决办法

变通办法

解决方法是在启动时获取stdio句柄,然后对任何其他调用方隐藏它们,这样Java引擎就不会找到它们,并在以后破坏它们。例如:

// Sock the handles away
HANDLE hStdIn  = GetStdHandle(STD_INPUT_HANDLE);
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
HANDLE hStdErr = GetStdHandle(STD_ERROR_HANDLE);

// Hide them from anyone else, especially Java
SetStdHandle(STD_INPUT_HANDLE,  INVALID_HANDLE_VALUE);
SetStdHandle(STD_OUTPUT_HANDLE, INVALID_HANDLE_VALUE);
SetStdHandle(STD_ERROR_HANDLE,  INVALID_HANDLE_VALUE);

有更好的解决办法吗?或者有人能解释为什么Java小程序关闭stdio句柄,以及这是否可以避免吗?

您是否检查过Java控制台,看看这是否不仅仅是SecurityManager的问题?你在小程序上签名了吗?我们需要更多的信息和一些代码。您是如何请求从stdin读取权限的?我想您指的是System.in.我不是javaapplet的作者。任何Java小程序都会出现这种情况。问题是为什么IE WebBrowser控件中嵌入的Java小程序会导致托管WebBrowser控件的进程中stdin被破坏。我完全误解了这个问题。很抱歉我认为这是一个java问题,但它更多的是一个Visual C++问题。可能应该删除java标记。没问题。java的问题是:为什么所有java小程序都关闭Windows上的stdio句柄?因此,我认为javaapplet标记是合适的。但我已经找到了一个解决办法,我将补充这个问题。