El siguiente código de VBScript obras prefectamenta bien:Marshal.GetActiveObject() lanza una excepción MK_E_UNAVAILABLE en C#
Dim App
Set App = GetObject("","QuickTest.Application")
App.Quit
Pero cuando se traducen en código C# de la siguiente manera:
class Program
{
[STAThread]
static void Main(string[] args)
{
object qtApp = Marshal.GetActiveObject("QuickTest.Application");
(qtApp as QuickTest.Application).Quit();
}
}
tengo la excepción :
Se produjo una excepción no controlada del tipo 'System.Runtime.InteropServices.COMException' en mscorlib.dll
Información adicional: (Excepción de HRESULT: 0x800401e3 (MK_E_UNAVAILABLE))
No creo que el problema está relacionado a la pudrición, porque el código VBScript funciona. Entonces, ¿qué está mal con el código C#?
gracias! Utilicé su código para listar objetos en ROT, encontrando que no hay ningún objeto relacionado con QuickTest en la lista. ¡Pero, curiosamente, el código de vbscript aún funciona! ¿La función GetObject() de vbscript no busca el ROT como lo hace la contraparte C#? – TomCaps
http://msdn.microsoft.com/en-us/library/kdccchxa%28v=vs.85%29.aspx MSDN GetObject primera observación: "Si pathname es una cadena de longitud cero (" "), GetObject returns una nueva instancia de objeto del tipo especificado. ", por lo que su VBScript creará una nueva instancia de QuickTest.Application, y su código en C# tiene que ser como var qtApp = new QuickTest.Application(); ... – MishaU
Cambié el código de C# en var qtApp = new QuickTest.Application(); ¡y funciona! ¡muchas gracias! – TomCaps