我正在研究对文件执行一些运行时子进程的java应用程序,对于某些文件我收到错误会导致向Microsoft窗口发送错误报告,我需要以编程方式处理此错误,而不显示此窗口用户。请任何人帮忙吗?
答案 0 :(得分:1)
要抑制Windows错误报告,正在调用的.exe不应以未处理的异常终止。这仅在您有权访问应用程序源时才有效。
基于WER Reference - 你应该使用Win32 API调用WerAddExcludedApplication将你想要忽略的特定.exe文件添加到每个用户的忽略列表中 - 你可以创建一个简单的存根应用程序,允许您按名称将应用程序添加到忽略列表。然后,当您调用应用程序时,它不会触发错误。
同样,您可以使用WerRemoveExcludedApplication创建另一个应用程序来删除它们。
替代方法是使用JNI / JNA创建一个类来封装此功能,而不是使用Runtime.exec
这是一个使用Java Native Access (JNA)的简单示例,它是JNI的简单版本(大多数情况下不需要C ++)。下载jna.jar并将其作为项目的一部分。
import com.sun.jna.Native;
import com.sun.jna.WString;
import com.sun.jna.win32.StdCallLibrary;
public class JNATest {
public interface CLibrary extends StdCallLibrary {
CLibrary INSTANCE = (CLibrary) Native.loadLibrary("wer.dll",
CLibrary.class);
int WerAddExcludedApplication(WString name, boolean global);
int WerRemoveExcludedApplication(WString name, boolean global);
}
public static void main(String[] args) {
CLibrary.INSTANCE.WerAddExcludedApplication(new WString("C:\\foo.exe"), false);
CLibrary.INSTANCE.WerRemoveExcludedApplication(new WString("C:\\foo.exe"), false);
}
}
基本上,将新的WString(...)
值替换为您要忽略的应用程序的名称。出于Windows错误报告的目的,应该忽略它。
请记住,wer.dll
仅适用于Windows Vista及更高版本,因此如果这是一个问题,则可能需要手动编辑注册表项。
答案 1 :(得分:0)
您始终可以使用try-catch-finally语句:
try
{
some code here (the code that is causing the error);
}
catch (Exception x)
{
handle exception here;
}
对我有用......
编辑以下链接可以为您提供更多帮助:
http://www.exampledepot.com/egs/Java%20Language/TryCatch.html