c# - C# 中的 VBScript 错误处理

标签 c# silverlight vbscript wmi comautomationfactory

我想在 Silverlight OOB 应用程序中使用 AutomationFactory 访问 WMI。

dynamic locator = AutomationFactory.CreateObject("WbemScripting.SWbemLocator");
dynamic wmi = locator.ConnectServer(".", "\\root\\cimv2");

我现在想为此添加错误处理。

MSDN指出如果调用成功,返回值是对连接对象的引用,如果出现错误,我应该检查 Err 对象。但是,我有两个问题:

  • 如果调用不成功,返回值是多少?无效的?一些我不能使用的任意指针?
  • 如何访问 Silverlight 中的 Err 对象?
  • 如何检测调用是否成功?是否有任何我必须捕获的异常?
  • 我见过一些使用 using 语句的例子,还有一些没有。我是否必须在使用动态对象后手动处置它们?

最佳答案

  • 如果调用不成功,返回值是多少?无效的?一些我不能使用的任意指针?

当对 COM 组件的调用失败时,不会返回任何值,并且赋值的 LHS 不会被修改。而是抛出 COMException

  • 如何访问 Silverlight 中的 Err 对象?

这不是“Err”对象,它是一个 VB(脚本)构造,它在 C# 中不存在。然而,您之后的信息将作为调用失败时抛出的 COMException 的属性提供。

  • 如何检测调用是否成功?是否有我必须捕获的异常?

是的,见上文。

  • 我见过一些使用 using 语句的例子,还有一些没有。我是否必须在使用动态对象后手动处置它们?

使用 Dispose 管理 COM 对象生命周期的尝试有不同的结果。就我个人而言,我会确保任何具有“关闭”方法之类的东西都具有该“关闭”方法调用并将其保留在那里。

如果您真的想让用户 COM 对象被释放,那么在适当的时候(不要太频繁)调用 GC.Collect

关于c# - C# 中的 VBScript 错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7603506/

相关文章:

c# - 如何使用 c#/cmd 将新行添加到 msi 文件的属性表

c# - 不在独立 exe 中运行时必须指定 exePath

c# - 使用 MVVM 在 Silverlight 3 DataGrid 中编辑新添加的行

iis - 服务器对象错误 'ASP 0177 : 800401f3' Server.CreateObject 失败 - 仅当未登录服务器时

command-line - 使用批处理和VBS创建快捷方式

batch-file - 如何在 Windows 中使用脚本运行多个快捷方式(.lnk 文件)?

c# - 使用动态属性名称反序列化 Newtonsoft Json 数据 - C#

c# - 我在本地主机上的 ASP.NET Web 服务超时太快

c# - 变量名称中的C#@符号

silverlight - 在 Silverlight MVVM 的组合框中更改所选项目时引发 PropertyChanged