Paulo Romeiro
Paulo Romeiro

Reputation: 191

Loading application for Console Application

I have an application in C # and WPF application that calls a console application that performs some tasks and makes the call the main form. The first step is completed, however when trying to call back the main application, it is not possible.

This is the main application method that calls the console app

private void Window_Loaded(object sender, RoutedEventArgs e)
    {

        var doc = new XmlDocument();
        doc.Load("http://www.mysite.org.br/Cantina/arquivoXML.xml");
            if (doc.DocumentElement != null)
            {
                var node = doc.DocumentElement.SelectSingleNode("/Application/Version");
                var node1 = doc.DocumentElement.SelectSingleNode("/Application/ZipFile");
                if (node != null)
                {
                    var version = node.InnerText;
                    var versionAssembly = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
                    if (Convert.ToDouble(version) > Convert.ToDouble(versionAssembly))
                    {
                        Process.Start("Updater.exe");
                    }
                }
            }
       }

Updater.exe to load the console application does its tasks, bears IASD.ASCS.WPF.exe, and closes automatically as code below.

 using System.Diagnostics;
 using Ionic.Zip;
 using System.Xml;
 using System.IO;


namespace Updater
{
    public class Program
    {
        private static void Main()
        {
           Process[] process = Process.GetProcessesByName("IASD.ASCS.WPF");
            foreach (Process proc in process)
        {
            if (!proc.HasExited)
                proc.Kill();
        }
        XmlDocument doc = new XmlDocument();
        doc.Load("http://www.mysite.org.br/Cantina/arquivoXML.xml");
        if (doc.DocumentElement != null)
        {
            XmlNode node1 = doc.DocumentElement.SelectSingleNode("/Application/ZipFile");
            if (node1 != null)
            {
                string zipfile = node1.InnerText;
                const string end = ("http://www.mysite.org.br/Cantina/");
                string file = (end + zipfile);
                string path = System.AppDomain.CurrentDomain.BaseDirectory;
                string path2 = (System.AppDomain.CurrentDomain.BaseDirectory + @"\Temp");
                string path3 = System.IO.Path.Combine(typeof(Program).Assembly.Location, "IASD.ASCS.WPF.exe");
                ZipFile zipFile = ZipFile.Read(file);
                {
                    foreach (var zipEntry in zipFile)
                    {
                        zipEntry.Extract(path2,ExtractExistingFileAction.OverwriteSilently);
                    }
                }
                string dirTemp = path2;
                string dirInstalacao = path;
                string[] arquivos = Directory.GetFiles(path2);
                foreach (string item in arquivos)
                {
                    string nomedoarquivo = Path.GetFileName(item);
                    if (nomedoarquivo != null)
                    {
                        string destino = Path.Combine(dirInstalacao, nomedoarquivo);
                        File.Copy(item, destino, true);
                    }
                }
                string[] arquivosApagar = Directory.GetFiles(path2);
                foreach (string item in arquivosApagar)
                {
                    File.Delete(item);
                }
                Process.Start(path3);
            }
        }
        const string nomeExecutavel2 = "Updater.exe";
        foreach (Process pr2 in Process.GetProcessesByName(nomeExecutavel2))
        {
            if (!pr2.HasExited) pr2.Kill();
        }
    }
  }
}

but did not work.

The executable is not calling

Now if I mark the paths as the updater code below fucniona perfectly.

using System.Diagnostics;
using Ionic.Zip;
using System.Xml;
using System.IO;


namespace Updater
{
 public class Program
{
    private static void Main()
    {
       Process[] process = Process.GetProcessesByName("IASD.ASCS.WPF");
        foreach (Process proc in process)
        {
            if (!proc.HasExited)
                proc.Kill();
        }
        XmlDocument doc = new XmlDocument();
        doc.Load("http://www.escolasaps.org.br/Cantina/arquivoXML.xml");
        if (doc.DocumentElement != null)
        {
            XmlNode node1 =      doc.DocumentElement.SelectSingleNode("/Application/ZipFile");
            if (node1 != null)
            {
                string zipfile = node1.InnerText;
                const string end = ("http://www.escolasaps.org.br/Cantina/");
                string file = (end + zipfile);
                ZipFile zipFile = ZipFile.Read(file);
                {
                    foreach (var zipEntry in zipFile)
                    {
                        zipEntry.Extract(@"c:\IASD\CantinaEscolar\Temp",ExtractExistingFileAction.OverwriteSilently);
                    }
                }
                string dirTemp = @"c:\IASD\CantinaEscolar\Temp";
                string dirInstalacao = @"c:\IASD\CantinaEscolar\";
                string[] arquivos = Directory.GetFiles(dirTemp);
                foreach (string item in arquivos)
                {
                    string nomedoarquivo = Path.GetFileName(item);
                    if (nomedoarquivo != null)
                    {
                        string destino = Path.Combine(dirInstalacao, nomedoarquivo);
                        File.Copy(item, destino, true);
                    }
                }
                string[] arquivosApagar = Directory.GetFiles(dirTemp);
                foreach (string item in arquivosApagar)
                {
                    File.Delete(item);
                }
                Process.Start("IASD.ASCS.WPF.exe");
            }
        }
        const string nomeExecutavel2 = "Updater.exe";
        foreach (Process pr2 in Process.GetProcessesByName(nomeExecutavel2))
        {
            if (!pr2.HasExited) pr2.Kill();
        }
      }
   }
}

Upvotes: 0

Views: 185

Answers (1)

Martin Costello
Martin Costello

Reputation: 10843

Try this:

string path = System.IO.Path.Combine(typeof(Program).Assembly.Location, "MyExe.exe");
using (Process.Start(path))
{
}

Upvotes: 1

Related Questions