我有一位客戶/合作伙伴試圖使用我們公開的COM功能將他們的應用程序與我們的應用程序相關聯。到目前爲止,他們已經有了一個COM對象,它代表了我們軟件包的一個實例,然後使用我們的COM方法以編程方式爲用戶構建了一些基於他們在應用程序中完成的工作。它本質上是一個「導出」功能。在.NET中釋放COM對象的「所有權」
他們要求我做的事情,我不知道該怎麼做才能讓用戶決定何時關閉實例。我的意思是當我們的軟件包被加載時,它是可見的並且由用戶進行交互。當他們完成後,他們自然地點擊右上角的十字,退出軟件。這不起作用,因爲COM對象在其應用程序中仍處於「活動」狀態。我們的軟件包只能通過終止任務管理器中的進程來關閉,而通過COM加載它的應用程序保持打開狀態。一旦他們的申請退出,我們的申請將自動關閉。由於COM調用,它們的應用程序似乎「擁有」了我們的應用程序。
我在C#中製作了一個快速演示應用程序,嘗試使用諸如Marshal.FinalReleaseComObject(myObject)
之類的東西無濟於事。
我意識到使用COM來處理這種事情並不是真正的目的,但希望有一些解決方法?客戶/合作伙伴正在使用VB.NET,但C#很好。
請澄清,如果您的應用程序是從應用程序本身(類似於VS或Office應用程序中的VBA腳本)或從外部(類似於使用Word自動化從您自己的控制檯應用程序/腳本創建新文檔)自動執行的? –
他們無法關閉窗口?這沒有意義,你需要澄清。 –
從外面看,他們使用VB通過引用我們的exe並從中實例化一個COM對象來啓動一個新的進程。我們有一個「Open」,它聽起來像是什麼,打開我們軟件包的可用窗口。在不能夠關閉該窗口而言,你不能單擊紅色的X在右上角,以及你可以,但沒有任何反應。它只會在VB應用程序關閉時關閉。我不知道了很多關於COM互操作,但它似乎像VB應用程序有所有權或者是進程的父進程。 – sxthomson