C# 安全捕获API崩溃/退出

C# 安全捕获API崩溃/退出,c#,C#,我正在使用第三方电子解算器,通过其API将其应用到我的C#程序中 我的问题是,当网络许可证不可用时,第三方软件有时会关闭 项目技术支持人员说,这是因为当许可证不可用时会发送退出信号 现在,当第三方软件关闭时,我的程序也会关闭。有没有办法避免这种情况 示例代码如下所示: public class PF_Interface { WApi apiInstance; public void CreateAPI() { apiInstance = WApi.WCreat

我正在使用第三方电子解算器,通过其API将其应用到我的C#程序中

我的问题是,当网络许可证不可用时,第三方软件有时会关闭

项目技术支持人员说,这是因为当许可证不可用时会发送退出信号

现在,当第三方软件关闭时,我的程序也会关闭。有没有办法避免这种情况

示例代码如下所示:

public class PF_Interface {

    WApi apiInstance;

    public void CreateAPI() {
        apiInstance = WApi.WCreateApiInstance();
    }
}
如果程序不可用,则行
apinstance=WApi.wcreateapinstance()
不会返回任何内容,执行也不会进一步


我希望以某种方式独立于我的程序运行API,因此当它关闭时,我的程序仍在运行。

这里的干净选项是使用两个进程


脏选项是使用Microsoft Detours或类似的挂钩技术捕获对
ExitProcess
的调用,并抛出一个可以在您自己的代码中捕获的异常。但是,不知道库的状态如何,因此不要指望在许可证可用后能够稍后重试。

当您在其他线程上创建api时会发生什么情况?我会尝试,然后报告。为什么您的程序会关闭,而他们的程序会关闭?使用混合模式调试器,在
kernel32.dll
中的
ExitProcess
函数上放置一个断点(好吧,它就在那里,新版本的Windows将在其中一个
winbase
*dll中)。查看堆栈跟踪是什么。如果它真的是一个信号,你可以安装一个处理程序,但我怀疑这项技术意味着程序调用C运行时函数
exit
@CodeCaster:在进程中加载DLL,它调用
exit
abort
,而不是返回,显然,将API创建放在另一个线程中似乎很有效,因为现在我可以显示一个有问题的MessageBox。