我正在将一个基于C的第三方软件开发工具包集成到我的.NET应用程序中。应用程序将作为Windows服务在服务器上运行,因此它不应以任何方式与用户交互。
不幸的是,在某些错误条件下,它坚持调用MessageBoxA,大概是为了报告发生了什么不好的事情。当发生这种情况时,服务将停止响应。我猜它是在等人按,好吗?
不可能让供应商为我更改他们的代码。
有没有办法让我把这个调用变成一个no-op,这样我的代码可以自动处理这种情况?
编辑:在我的特殊情况下,如果服务崩溃,它将自动重新启动,这一点可能很重要。对于在我的例子中显示MessageBox的情况,优雅(尽可能)突然退出可能是最好的解决方案。
发布于 2010-02-02 04:14:37
查看Detours from Microsoft Research。它允许您绕过任意的Windows API函数。但是,需要C/C++编程才能使其工作。你不需要太多。
发布于 2010-02-02 04:10:45
您可以使用一个编辑器来找到它的位置,并从它们的二进制文件中删除调用。但在软件的使用限制下,这可能是允许的,也可能是不允许的。当然,如果您重新分发它,它可能会导致问题-您应该询问供应商并将其报告为缺陷,并建议您有一个供自己使用的解决方案。
对于习惯于做这种事情(破解许可或其他反向工程)的人来说,这是相当简单的,但真正的问题是,如果它被忽略了会发生什么-它还能继续工作吗?
https://stackoverflow.com/questions/2179672
复制相似问题