delphi exe异常关闭,怎么获取异常关闭状态

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi exe异常关闭,怎么获取异常关闭状态相关的知识,希望对你有一定的参考价值。

比如说由任务管理器关闭了正在运行的程序,对这种异常关闭的状态,程序下次打开的时候会有一些处理,所以我想要区分程序是异常关闭还是正常关闭。

用下面的例程去调用delphi.exe(找一台运行delphi没问题的机器调试好含下面例程的程序)。

function WinExecAndWait32(FileName: string; Visibility: Boolean): integer;
var
zAppName: array[0..512] of char; //存放应用程序名
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
exitCode: Dword;
aVisibility: integer;
begin
StrPCopy(zAppName, FileName);
FillChar(StartupInfo, Sizeof(StartupInfo), #0);
//给StartupInfo结构体赋值
StartupInfo.cb := Sizeof(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
if Visibility then
aVisibility := 1
else
aVisibility := 0;

StartupInfo.wShowWindow := aVisibility;
//调用CreateProcess 创建进程,执行指定的可执行文件
if not CreateProcess(nil, zAppName, nil, nil, false
, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS
, nil, nil, StartupInfo, ProcessInfo) then
Result := -1
else
begin
//等待可执行文件退出
WaitforSingleObject(ProcessInfo.hProcess, INFINITE);
//得到进程终止状态码
GetExitCodeProcess(ProcessInfo.hProcess, exitCode);
result := Exitcode;
end;
end;
参考技术A 安装EurekaLog,这个控件可以清楚的告诉你那里出错了

C# HttpClient 在没有成功状态代码时抛出异常 [关闭]

【中文标题】C# HttpClient 在没有成功状态代码时抛出异常 [关闭]【英文标题】:C# HttpClient throws Exception on no Sucess Status Codes [closed] 【发布时间】:2017-05-22 14:31:45 【问题描述】:

我遇到了一个非常奇怪的问题。当我请求的网页返回的状态代码不是 2** 状态代码时,HttpClient 会抛出异常。

实施:

try 

    //post-anfrage an webservice starten
    var request = await httpClient.PostAsync(SettingsPage.WebServiceURL + site,
                content);

    if (!request.IsSuccessStatusCode) 
        if (request.StatusCode == System.Net.HttpStatusCode.Unauthorized) 
            await User.Instance.Logout();
        
        var message = await request.Content.ReadAsStringAsync();
        RaiseErrorMessage(null, message);
    

    SaveCookies(request);

    timer.Change(PING_INTERVAL, PING_INTERVAL);

    return request;

catch (TaskCanceledException e) 
    RaiseConnectionError(null, "Verbindung zu Webservice fehlgeschlagen!");
    return null;

catch (Exception ex) 
    RaiseConnectionError(null, "Es ist etwas schief gelaufen..." + System.Environment.NewLine + "Bitte Support Kontaktieren!");
    Debug.WriteLine("AppWarehouse.pro: " + ex.Message);
    Debug.WriteLine("AppWarehouse.pro: " + ex.StackTrace);
    return null;


我不明白它为什么会这样做。对我来说,这种行为没有理由。我会很高兴得到修复或帮助修复它。

【问题讨论】:

!request.IsSuccessStatusCode - 如果 StatusCode 不在 2** 范围内,则会引发错误。例如,如果您收到 404,则该行代码将导致错误。您正在发布内容,并且想知道操作是否按预期进行。 @DanielHollinrake 不是这不是导致问题的原因。它仍然会抛出名为 HttpRequestException 的异常。 那么,代码是在if语句之前抛出异常吗?如果是这样,您能否确认一下 httpClient 是什么类型? @DanielHollinrake 在 if 语句之前是... HttpClient 来自 System.Net.Http; 你怎么知道有响应状态,即 404 或 403 而不是 HResult? 【参考方案1】:

我已修复它...这是 Xamarin 结合程序集的奇怪行为。

【讨论】:

以上是关于delphi exe异常关闭,怎么获取异常关闭状态的主要内容,如果未能解决你的问题,请参考以下文章

Delphi - 在连接到 Oracle 并调用 Web 服务方法后关闭时 ntdll.dll 中的异常

eclipse异常关闭,无法启动tomcat解决办法

你如何干净地中止一个 Delphi 程序?

C# 关於数据库连接关闭的异常

MFC应用程序关闭后异常中断

关闭异常进程bat格式文件