En este artículo os vamos a describir una forma sencilla sobre cómo modificar la configuración exe de .NET para así ejecutar aplicaciones de consola utilizando aplicaciones web de ASP.NET en un mismo servidor.
A veces tenemos que utilizar aplicaciones de consola para realizar una tarea (por ejemplo para hacer tareas sobre informes), pero tenemos que ejecutarlas mediante una aplicación web. En este artículo vamos a explicaros cómo ejecutar la aplicación de consola .NET utilizando algunos parámetros y un botón para modificar app.config y así ejecutar la aplicación, respectivamente.
En este tutorial vamos a seguir estos pasos.
- Crear una aplicación de consola simple.
- Crear una aplicación web ASP.NET muy simple (desde un proyecto vacío).
- Crear dos métodos para modificar el app.config y ejecutar la aplicación de consola, haciendo clic en un botón.
1. Crear una aplicación de consola simple.
Bien, partimos del primer punto. En este paso, vamos a crear una aplicación de consola simple utilizando C# (yo uso Visual Studio 2012). Creamos una aplicación force killer (vamos a nombrarlo ProcessKiller). Con esta aplicación, podemos matar cualquier aplicación en proceso de fondo, como por ejemplo Excel, la calculadora o la que queramos. Esto es sólo un ejemplo, puedes crear otra aplicación de consola que sea adecuado a tus necesidades.
A continuación puedes ver el código C# utilizado. Ten en cuenta que necesitamos incluir Configuration Manager (namespace System.Configuration) y Diagnostics (namespace System.Diagnostics) como referencia en nuestro proyecto, así que no te pierdas.
using System; using System.Collections; using System.Configuration; using System.Diagnostics; namespace ProcessKiller { class Program { static void Main(string[] args) { string ApplicationName = ConfigurationManager.AppSettings["ApplicationName"].ToString(); Process[] Processes = Process.GetProcessesByName(ApplicationName); // check to kill the right process foreach (Process process in Processes) { process.Kill(); } } } }
Una vez hayamos implementado la parte de C#, podemos jugar un poco con el app.config. Creamos el nodo de configuración de la aplicación en el app.config (ten en cuenta que el archivo app.config es un archivo XML, por lo que vamos a utilizar la biblioteca XML en nuestra llamada del método en ASP.NET).
Creamos una clave-valor en el app.config. Nombra la clave como ApplicationName, y establece el valor (por defecto) como "calc". El código sería algo así:
<!--?xml version="1.0" encoding="utf-8" ?-->
<configuration>
<appsettings>
<add key="ApplicationName" value="calc">
</add></appsettings>
</configuration>
Una vez tenemos todo esto, montamos el proyecto.
2. Crear una aplicación web ASP.NET muy simple (desde un proyecto vacío)
Creamos una aplicación web muy sencilla (nombradla como Webkiller). Crea un proyecto desde una plantilla de aplicación web vacía, y añade el Default.aspx al proyecto. Lo único que necesitamos es crear un cuadro de texto para cambiar el valor de la key de ApplicationName en nuestra consola app.config, y creamos un botón que ejecutará la aplicación de la consola haciendo clic en él.
A continuación tienes el código ASP.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebKiller.Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Execute" OnClick="Button1_Click" />
</div>
</form>
</body>
</html>
Tras depurarlo, la aplicación web quedaría tal que así:
Okey, ya hemos realizado el código ASP. Recuerda el control ID en ASP, ya que tendremos que utilizarlo en el código C#.
3. Crear dos métodos para modificar el app.config y ejecutar la aplicación de consola, haciendo clic en un botón
En este paso, vamos a crear el código de detrás de la aplicación web. Crearemos un método de evento (al hacer clic) para el botón que hemos creado, asegúrate de crear el método de eventos vacío desde la ventana de eventos en Visual Studio.
Ahora, crearemos un método vacío para cambiar el app.config de la aplicación de consola. Recuerda el valor-clave en el app.config. Vamos a llamar a este método más adelante en nuestro método de evento del botón.
El código del método tiene que ser algo así. Nombre al método como ChangeValueOfKeyConfig().
private void ChangeValueOfKeyConfig(string ProcessName) { // I locate the ProcessKiller Console Application in E drive. string tAppPath = @"E:ProcessKillerProcessKillerbinDebug"; string tProcessName = TextBox1.Text; string tAppPathWithConfig = @"" + tAppPath + "ProcessKiller.exe.config"; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(tAppPathWithConfig); foreach (XmlElement element in xmlDoc.DocumentElement) { if (element.Name == "appSettings") { foreach (XmlNode node in element.ChildNodes) { RenameItemConfig(node, "ApplicationName", ProcessName); //RenameItemConfig(node, "Other Key", "Other Value"); } } } xmlDoc.Save(tAppPathWithConfig); } private void RenameItemConfig(XmlNode node, string Key, string value) { if (node.Attributes.Item(0).Value == Key) { node.Attributes.Item(1).Value = value; } }
Ten en cuenta que podemos cambiar el valor de una clave en un archivo app.config utilizando el método RenameItemConfig(). Después, estaremos listos para completar el método de evento del botón aquí. En primer lugar tenemos que "obtener" el valor del cuadro de texto que hemos creado, y entonces tendremos que buscar la aplicación de consola en la ruta en la que queremos que se ejecute, entonces podremos llamar a nuestro método ChangeValueOfKeyConfig() con el botón haciendo click y llamando al método, y de nuevo se nos abrirá Símbolo del sistema (CMD). Vamos a ejecutar la aplicación de consola a través de CMD mediante algunos comandos. A continuación te mostramos el código completo en Default.aspx.cs.
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Xml; namespace WebKiller { public partial class Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void Button1_Click(object sender, EventArgs e) { ChangeValueOfKeyConfig(TextBox1.Text); System.Diagnostics.Process process = new System.Diagnostics.Process(); process.StartInfo.FileName = "cmd"; process.StartInfo.WorkingDirectory = @"E:ProcessKillerProcessKillerbinDebug"; process.StartInfo.Arguments = "/c "" + "ProcessKiller.exe" + """; process.Start(); } private void ChangeValueOfKeyConfig(string ProcessName) { // I locate the ProcessKiller Console Application in E drive. string tAppPath = @"E:ProcessKillerProcessKillerbinDebug"; string tProcessName = TextBox1.Text; string tAppPathWithConfig = @"" + tAppPath + "ProcessKiller.exe.config"; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(tAppPathWithConfig); foreach (XmlElement element in xmlDoc.DocumentElement) { if (element.Name == "appSettings") { foreach (XmlNode node in element.ChildNodes) { RenameItemConfig(node, "ApplicationName", ProcessName); //RenameItemConfig(node, "Other Key", "Other Value"); } } } xmlDoc.Save(tAppPathWithConfig); } private void RenameItemConfig(XmlNode node, string Key, string value) { if (node.Attributes.Item(0).Value == Key) { node.Attributes.Item(1).Value = value; } } } }
Ahora podemos probar nuestro proyecto, obligando a matar el proceso de la aplicación Excel. Lo que tenemos que hacer: Abrir / ejecutar la aplicación web en nuestro navegador, y llenar la caja de texto de entrada con la palabra "excel" (todo en minúsculas), y antes de hacer clic en el botón "Ejecutar", abrimos Microsoft Office Excel. Si el Excel se abre, haz clic en el botón "Ejecutar". La aplicación de consola hará su trabajo, y obligará a eliminar/ cerrar el proceso de excel.