Cómo ejecutar el código excel vba desde un servicio de Windows

Quiero ejecutar un código de Excel VBA desde mi servicio de Windows. El Servicio está utilizando un fileSystemWatcher para monitorear un directorio para agregar un archivo xml. Una vez que se agrega un archivo, el contenido del archivo xml se deserializa en propiedades de objeto. En esta etapa, quiero abrir un archivo de Excel y pasar estos valores a ciertas celdas y ejecutar el código vba de ese libro de trabajo. Esto funciona perfectamente desde una aplicación de formularios de Windows, pero no puedo hacer que funcione desde mi aplicación de Servicio de Windows. Adjunté un depurador a la aplicación para probar y ver lo que estaba sucediendo, pero no se produjeron errores y todos los pasos se completaron correctamente. Sé que un servicio de Windows no admite la apertura de archivos de MS Office, ya que existen problemas para interactuar con la interfaz de usuario y los permisos de usuario que tiene. Pero estoy buscando un trabajo alrededor de cualquier manera para poder obtener este código vba ejecutándose desde un servicio. Estoy usando Windows 7 Home Premium 32 bit y tengo mi cuenta para mi servicio configurada en LocalSystem. Este es el código que estoy usando:

    private void FSWatcherTest_Created(object sender, System.IO.FileSystemEventArgs e)
    {
            Trade t;
            XmlSerializer serializer;
            XmlReader reader;
            XmlWriter writer;

            string filePath = @"C:\Inbox\TradeInfo.xml";


            serializer = new XmlSerializer(typeof(Trade));
            reader = XmlReader.Create(filePath);
            t = (Trade)serializer.Deserialize(reader);
            reader.Close();



            string path=@"C:\Windows\System32\config\systemprofile\Desktop\TwsDde.xls";

            oXL = new Microsoft.Office.Interop.Excel.Application();

            oXL.Visible = true;

            oXL.DisplayAlerts = false;

            mWorkBook = oXL.Workbooks.Open(path,2, false, 5, "", "", true,Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true,false, false);

            //Get all the sheets in the workbook

            mWorkSheets = mWorkBook.Worksheets;

            //Get the allready exists sheet

            mWSheet1=(Microsoft.Office.Interop.Excel.Worksheet)mWorkSheets.get_Item("Basic Orders");

            // Microsoft.Office.Interop.Excel.Range range= mWSheet1.UsedRange;

            mWSheet1.Cells[12, 1] = "GE";
            mWSheet1.Cells[12, 2] = "STK";
            mWSheet1.Cells[12, 7] = "SMART";
            mWSheet1.Cells[12, 9] = "USD";
            mWSheet1.Cells[12, 12] = "Buy";
            mWSheet1.Cells[12, 13] = "100";
            mWSheet1.Cells[12, 14] = "MKT";

            Excel.Range range;
            Excel.Range row;

            range = mWSheet1.get_Range("A12", "O12");
            range.EntireRow.Select();

            oXL.Run("TwsDde.xls!Sheet2.placeOrder");
        }

Cualquier ayuda sería muy apreciada. ¿O formas alternativas de hacer lo mismo, es decir, ejecutar un formulario de Windows que contenga este código, tal vez?

Respuestas a la pregunta(3)

Su respuesta a la pregunta