Poniższy kod VBScript działa perfekcyjnie dobrze:Marshal.GetActiveObject() wyrzuca MK_E_UNAVAILABLE wyjątek w C#
Dim App
Set App = GetObject("","QuickTest.Application")
App.Quit
Ale kiedy przełożyć je na kod C# jak poniżej:
class Program
{
[STAThread]
static void Main(string[] args)
{
object qtApp = Marshal.GetActiveObject("QuickTest.Application");
(qtApp as QuickTest.Application).Quit();
}
}
otrzymuję wyjątek :
Nieobsługiwany wyjątek typu "System.Runtime.InteropServices.COMException" wystąpił w pliku mscorlib.dll
Dodatkowe informacje: (Wyjątek od HRESULT: 0x800401E3 (MK_E_UNAVAILABLE))
Nie sądzę, że problem jest związany z ROT, ponieważ działa kod vbscript. Więc co jest nie tak z kodem C#?
dzięki! Użyłem twojego kodu do listy obiektów w ROT, stwierdzając, że nie ma żadnego powiązanego obiektu QuickTest na liście. Ale, co dziwne, kod vbscript nadal działa! Czy funkcja GetObject (vbscript) nie wyszukuje ROTa, tak jak to robi odpowiednik C#? – TomCaps
http://msdn.microsoft.com/en-us/library/kdccchxa%28v=vs.85%29.aspx MSDN GetObject Pierwsza uwaga: "Jeśli pathname jest łańcuchem o długości zero (" "), GetObject zwraca nowa instancja obiektu określonego typu. ", więc twój VBScript tworzy nową instancję QuickTest.Application, a twój kod w C# musi być podobny do var qtApp = new QuickTest.Application(); ... – MishaU
Zmieniłem kod C# na var qtApp = new QuickTest.Application(); i to działa! Dziękuję Ci bardzo! – TomCaps