आप निश्चित रूप से Windows त्रुटि रिपोर्टिंग API का उपयोग कर सकते हैं जो Win32 API के हिस्से के रूप में wer.dll
में जहाजों का उपयोग करता है।
जावा से डीएलएल-आधारित कार्यों को कॉल करने का सबसे अच्छा तरीका सक्रिय रूप से विकसित Java Native Access project का उपयोग कर रहा है। ,
typedef struct _WER_REPORT_INFORMATION {
DWORD dwSize;
HANDLE hProcess;
WCHAR wzConsentKey[64];
WCHAR wzFriendlyEventName[128];
WCHAR wzApplicationName[128];
WCHAR wzApplicationPath[MAX_PATH];
WCHAR wzDescription[512];
HWND hwndParent;
} WER_REPORT_INFORMATION, *PWER_REPORT_INFORMATION;
ऐसा करने के लिए:
आदेश आवश्यक Win32 API कॉल करने के लिए, हम कम से कम इन कार्यों के बारे में JNA सिखाने के लिए की आवश्यकता होगी:
HRESULT WINAPI WerReportCreate(
__in PCWSTR pwzEventType,
__in WER_REPORT_TYPE repType,
__in_opt PWER_REPORT_INFORMATION pReportInformation,
__out HREPORT *phReportHandle
);
HRESULT WINAPI WerReportSubmit(
__in HREPORT hReportHandle,
__in WER_CONSENT consent,
__in DWORD dwFlags,
__out_opt PWER_SUBMIT_RESULT pSubmitResult
);
है और यह भी इस struct हम WER.java पैदा हो जाएगी:
package com.sun.jna.platform.win32;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.platform.win32.WinDef.HWND;
import com.sun.jna.platform.win32.WinNT.HANDLE;
import com.sun.jna.platform.win32.WinNT.HRESULT;
import com.sun.jna.ptr.PointerByReference;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.win32.W32APIOptions;
public interface Wer extends StdCallLibrary {
Wer INSTANCE = (Wer) Native.loadLibrary("wer", Wer.class,
W32APIOptions.DEFAULT_OPTIONS);
public static class HREPORT extends HANDLE {
public HREPORT() { }
public HREPORT(Pointer p) { super(p); }
public HREPORT(int value) { super(new Pointer(value)); }
}
public static class HREPORTByReference extends ByReference {
public HREPORTByReference() {
this(null);
}
public HREPORTByReference(HREPORT h) {
super(Pointer.SIZE);
setValue(h);
}
public void setValue(HREPORT h) {
getPointer().setPointer(0, h != null ? h.getPointer() : null);
}
public HREPORT getValue() {
Pointer p = getPointer().getPointer(0);
if (p == null)
return null;
if (WinBase.INVALID_HANDLE_VALUE.getPointer().equals(p))
return (HKEY) WinBase.INVALID_HANDLE_VALUE;
HREPORT h = new HREPORT();
h.setPointer(p);
return h;
}
}
public class WER_REPORT_INFORMATION extends Structure {
public DWORD dwSize;
public HANDLE hProcess;
public char[] wzConsentKey = new char[64];
public char[] wzFriendlyEventName = new char[128];
public char[] wzApplicationName = new char[MAX_PATH];
public char[] wzDescription = new char[512];
public HWND hwndParent;
dwSize = new DWORD(size());
}
public abstract class WER_REPORT_TYPE {
public static final int WerReportNonCritical = 0;
public static final int WerReportCritical = 1;
public static final int WerReportApplicationCrash = 2;
public static final int WerReportApplicationHang = 3;
public static final int WerReportKernel = 4;
public static final int WerReportInvalid = 5;
}
HRESULT WerReportCreate(String pwzEventType, int repType, WER_REPORT_INFORMATION pReportInformation, HREPORTByReference phReportHandle);
HRESULT WerReportSubmit(HREPORT hReportHandle, int consent, DWORD dwFlags, WER_SUBMIT_RESULT.ByReference pSubmitResult);
}
मैं बस कुछ ही मिनट में एक साथ कि खटखटाया MSDN dcoumentation से एस - अगर यह अपूर्ण है, या गलत है, तो tons of examples और pretty good documentation जेएनए वेबसाइट पर हैं।
जेएनए चलाने के लिए, आपको jna.jar
और platform.jar
की आवश्यकता होगी, जिसे आप जेएनए वेबसाइट से भी ले सकते हैं।
[NTEventLogAppender] (http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/nt/NTEventLogAppender.html) या जैसा? संपादित करें: [संभावित रूप से संबंधित प्रश्न] (http://stackoverflow.com/questions/164879/how-to-write-from-java-to-the-windows-event-log) –
@VineetReynolds, क्या यह "भेजें" को ट्रिगर करेगा माइक्रोसॉफ्ट के लिए बग रिपोर्ट "कार्रवाई? –
[नहीं। यह केवल एक क्रैश पर होने के लिए कॉन्फ़िगर किया गया है।] (Http://support.microsoft.com/kb/310414) –