真的不知道我可以用這個做,但希望有人也許能夠幫助強制進程關閉時,COM對象被銷燬
基本上,我已經開發了通過桌面的會計制度交換信息系統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,但並沒有真正看到如何獲得所需的方法等
我懷疑,如果會計軟件存在內部垃圾收集問題。我已經多次與他們交談過,但他們不願意做任何事情。
欣賞任何幫助
應該說,我已經爲此實現了IDisposable自己的封裝類。在Sub Dispose中我正在清理我的對象引用。 – Hursey