Mam klienta/partnera, który stara się połączyć swoją aplikację z nasza pomocą naszego odsłoniętą funkcjonalność COM. Jak dotąd mają obiekt COM reprezentujący egzemplarz naszego pakietu oprogramowania, a następnie wykorzystują nasze metody COM do programistycznego budowania czegoś dla użytkownika na podstawie tego, co zrobili w swojej aplikacji. Zasadniczo jest to funkcja "eksportu".Release „własność” obiektu COM w .NET
Co oni poprosił mnie do zrobienia, których nie mogę dowiedzieć się, jak zrobić to pozwolić użytkownikowi zdecydować, gdy instancja jest zamknięta. Mam na myśli to, że nasz pakiet oprogramowania jest załadowany, jest widoczny i jest współdziała z użytkownikiem. Gdy skończysz, klikną naturalnie krzyż w prawym górnym rogu, aby opuścić oprogramowanie. To nie działa, ponieważ obiekt COM jest nadal "aktywny" w swojej aplikacji. Nasz pakiet oprogramowania można zamknąć tylko przez zabicie procesu w menedżerze zadań, podczas gdy aplikacja, która załadowała go przez COM pozostaje otwarta. Gdy ich aplikacja zostanie zamknięta, nasza aplikacja zostanie automatycznie zamknięta. Wygląda na to, że ich aplikacja "posiada" naszą z powodu wywołania COM.
Zrobiłem szybką aplikację demonstracyjną w języku C#, aby spróbować użyć rzeczy takich jak Marshal.FinalReleaseComObject(myObject)
bezskutecznie.
Zdaję sobie sprawę, że używanie COM do tego typu rzeczy nie jest tym, do czego jest przeznaczone, ale mam nadzieję, że istnieje jakiś sposób obejścia tego problemu? Klient/partner używa VB.NET, ale C# jest w porządku.
Proszę wyjaśnić, czy aplikacja jest zautomatyzowana z poziomu samej aplikacji (podobnie do skryptów VBA w aplikacjach VS lub Office) lub z zewnątrz (podobnie jak przy użyciu automatyzacji programu Word w celu utworzenia nowego dokumentu z własnej aplikacji/skryptu konsoli)? –
Nie można zamknąć okna? To nie ma sensu, musisz to wyjaśnić. –
To z zewnątrz, używają VB, aby rozpocząć nowy proces, odwołując się do naszego exe i tworząc instancję obiektu COM z niego. Mamy "Open", który robi dokładnie to, na co wygląda, otwiera użyteczne okno naszego pakietu oprogramowania. Jeśli chodzi o brak możliwości zamknięcia okna, nie można kliknąć czerwonego X w prawym górnym rogu, dobrze, ale nic się nie dzieje. Zamknie się tylko, gdy ich aplikacja VB zostanie zamknięta. Nie wiem wiele o współdziałaniu z COM, ale wygląda na to, że aplikacja VB ma własność lub jest rodzicem tego procesu. – sxthomson