真的不知道我能用这个做什么,但希望有人能提供帮助
基本上,我开发了一个系统,通过 com 接口与桌面会计系统交换信息
我所做的是将 com 库的项目引用添加到我的 .net 项目中,然后在我的代码中创建一个新实例
Dim myObject as New AccountingLibraryType
这允许我访问可见的属性、过程和功能等,例如
myObject.Login("Login details go here")
这部分一切正常
当我完成对对象实例的处理时,我的问题就开始了。无论我做什么,我都会经常以仍在运行的过程结束
当我丢弃我的对象时,我会执行以下操作
myObject.Logout 'As per Accounting software developers, should close process
GC.Collect()
Marshel.ReleaseComObject(myObject) ' Also tried Marshal.FinalReleaseComObject(myObject)
myObject = Nothing
即使在这一切之后,该过程仍然在我的任务管理器中运行。
我已经调查过通过 ProgID 获取流程,但不幸的是,最终用户通常会直接在会计软件中工作,我无法确保获得正确的流程。
据我所见,com 对象上没有任何可用的东西来识别它的进程。我发现我可以获得属性集合,但无论如何也看不到从那个到正确的过程
Dim attributes As AttributeCollection
attributes = TypeDescriptor.GetAttributes(GetType(AccountingLibraryType))
所以首先,我还能做些什么来确保在我完成后完全关闭这个过程
其次,有没有更好的方法可以创建我的对象实例,我可以获得某种形式的进程句柄,但仍然可以访问可见的属性和方法。我查看了 Process 和 StartInfo 但无法真正了解如何获得所需的方法等
我怀疑会计软件的内部垃圾收集存在一些问题。我已经和他们谈过很多次了,但他们不愿意对此做任何事情。
感谢任何帮助