【发布时间】:2013-09-09 11:32:37
【问题描述】:
我有一个功能应该检查 COM 是否已在系统中注册。可能会发生,COM 已注册,但缺少 dll 文件 - 在这种情况下,函数也应该返回 false。 MessageBox 仅用于调试目的:
public bool IsCOMInstalled(string name)
{
try
{
MessageBox.Show("?");
var obj = Activator.CreateInstance(Type.GetTypeFromProgID(name));
MessageBox.Show("!");
return true;
}
catch (Exception e)
{
MessageBox.Show(e.Message);
return false;
}
}
在 Windows XP 和 7 以上版本上运行良好。在 Windows Server 2008 上,不处理异常。应用程序在显示“?”后立即崩溃。
这是为什么呢?如何让我的应用程序处理异常...?
【问题讨论】:
-
我相信我们需要那个
name。 -
嗯,它是 TestDll.TestTools。我看不出这会有什么帮助。
-
听起来你在初始化时在 TestDLL.TestTools 中有一个错误。如果有什么东西导致进程崩溃,那不是你能捕捉到的。
-
此外,这些 ExecutionEngineException、StackOverflowException 和 OutOfMemoryException 不会被捕获块捕获,您的应用程序只会死掉。但由于您正在进行 COM 调用,请首先检查是否缺少本机 DLL。
标签: c# com windows-server-2008