Why I can''t get my crashes in winqual account?
Hi!
Continue working with WER Api in Delphi
Part I "Some questions about WER"I
I try to integrate WER support in delphi application and write own exception process based on WerReportCreate and WerReportSubmit functions.
I'm raise exception, get right Bucket ID (50248784) and view status : Report Sent (see next screenshot)
I can't get this^^^ report in winqual portal!
(I think - problem in wrong version maping, but inPart II "What are the main parameters..." I understood what main map parameters is FileName, FileVersion, and Linkdate)
But if I'm re-raise exception in the Application.OnException event handler (this way to bypass Delphi exception handlers)
the Windows Error Reporting dialog is shown and application is terminated and this event appear in winqual account since 11 days! So long, but appear!

This ^^^report^^^ apperar in my account sonce 11 days!
Sorry at screnshot with russian Vista, but I pass test cases on Vista Ultimate Russian and don't install English version.
What difference between this two reports?
I see difference only in not localized in my problem signature table on first screenshot.
This my sample code:
program ProjectMyTestWERApi;{$APPTYPE CONSOLE} StringToWideChar(
...var
P : TObject;
hReportHandle : HREPORT;
werReportInfo : WER_REPORT_INFORMATION;
eventType : PWideChar;
Res : hResult;
PS1, PS2 : WideString;
Ver : TVersionInfo;
hMyModule : HMODULE;
ModuleName : WideString;
submitOptions : DWORD;
HF : integer;
Offset : integer;
begin
WriteLn('Program start');
try
P :=nil;
WriteLn(P.ClassName);//< Raise access violation here, P = nil!
except
on E : EAccessViolationdo
begin
FillChar(werReportInfo, SizeOf(werReportInfo),0);
werReportInfo.dwSize := sizeof(werReportInfo);
Length('Stopped working')+1);
StringToWideChar('ProjectMyTestWERApi.exe', werReportInfo.wzApplicationName,
Length('ProjectMyTestWERApi.exe')+1); eventType := APPCRASH_EVENT; Res := WerReportCreate(eventType, WerReportApplicationCrash,
StringToWideChar(E.Message, werReportInfo.wzDescription, Length(E.Message)+1);
@werReportInfo, @hReportHandle); PS1 := hMyModule := GetModuleHandle(
if Res = S_OKthen
begin PS1 :='Application Name';
PS2 := ExtractFileName('ProjectMyTestWERApi.exe');
WerReportSetParameter(hReportHandle,0, Addr(PS1[1]), Addr(PS2[1]));
Ver := TVersionInfo.Create('ProjectMyTestWERApi.exe');
PS2 := Ver.FileVersion;
WerReportSetParameter(hReportHandle,1, Addr(PS1[1]), Addr(PS2[1]));
Ver.Free;
HF := FileOpen('ProjectMyTestWERApi.exe', fmOpenReador fmShareDenyNone);
PS1 := FormatDateTime('d.mm.yyyy, h:nn',
FileDateToDateTime(FileGetDate(HF)));
FileClose(HF);
WerReportSetParameter(hReportHandle,2,'Application Timestamp',
Addr(PS1[1]));// determine module name from crash address
PS1 := Format('%p', [ExceptAddr()]);
GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESSor
GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
Addr(PS1[1]), hMyModule);
SetLength(ModuleName, MAX_PATH);
GetModuleFileNameW(hMyModule, Pointer(moduleName), Max_Path);
PS1 := ExtractFileName(Copy(ModuleName,1, Pos(#0,ModuleName)));
WerReportSetParameter(hReportHandle,3,'Fault Module Name', Addr(PS1[1]));// Fault module version
PS1 := .... // skip this code
WerReportSetParameter(hReportHandle,4,'Fault Module Version',
Addr(PS1[1]));
PS1 := .... // skip this code
WerReportSetParameter(hReportHandle,5,'Fault Module Timestamp',
Addr(PS1[1]));//Exception Code
if E.ExceptionRecord <>nilthen
PS1 := IntToHex(E.ExceptionRecord^.ExceptionCode,8)else PS1 :='Unknown';
WerReportSetParameter(hReportHandle,6,'Exception Code', Addr(PS1[1]));//Offset
Offset := StrToInt('$'+Format('%p', [ExceptAddr])) -
Integer(GetModuleHandle(nil)); submitOptions := WER_SUBMIT_OUTOFPROCESS
PS1 := IntToHex(Offset,8);
WerReportSetParameter(hReportHandle,7,'Exception Offset', Addr(PS1[1]));// test own parameter "Additional Information 1"
PS1 :='Additional Information 1';
PS2 :='<<<Структура вызовов>>>';
WerReportSetParameter(hReportHandle,8, Addr(PS1[1]), Addr(PS2[1]));
WerReportSubmit(hReportHandle, WerConsentNotAsked, submitOptions,
@submitResult);
case submitResultof
WerDisabled:
WriteLn('Error reporting was disabled.');
WerDisabledQueue:
WriteLn('Queuing was disabled.');
WerReportAsync:
WriteLn('Report was asynchronous.');
WerReportCancelled:
WriteLn('Report was cancelled.');
WerReportDebug:
WriteLn('Debug button clicked.');
WerReportFailed:
WriteLn('Report submission failed.');
WerReportQueued:
WriteLn('Report queued.');
WerReportUploaded:
WriteLn('Report uploaded');
end;
WerReportCloseHandle(hReportHandle);
end
end;
end.
What problem in my report or report parameters?
I can't understand - what is my problem?
Help me please!
Thank you!

