在某些情况下,可能需要使用控制台应用程序来执行特定的任务(例如生成报告),但同时希望这些任务能够通过Web应用程序来触发。本文将介绍如何通过ASP.NETWeb应用程序来执行.NET控制台应用程序,并在执行过程中修改配置文件。
控制台应用程序通常用于执行后台任务,如数据处理、文件生成等。而Web应用程序则提供了用户交互的界面。在某些特定场景下,可能需要将这两种类型的应用程序结合起来使用。例如,可能需要通过Web界面来触发一个控制台应用程序,以执行一些特定的任务。
将通过以下步骤来实现这一目标:
首先,将创建一个简单的控制台应用程序。在这个示例中,将创建一个名为“ProcessKiller”的应用程序,它可以用来结束后台进程,例如Excel、计算器或其他任何想要结束的进程。
以下是控制台应用程序的完整C#代码:
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);
foreach(Process process in Processes)
{
process.Kill();
}
}
}
}
接下来,需要在app.config文件中做一些配置。将在app.config文件中创建一个键值对,键名为"ApplicationName",并将默认值设置为"calc"。
app.config文件的内容如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="ApplicationName" value="calc" />
</appSettings>
</configuration>
接下来,将创建一个简单的ASP.NETWeb应用程序。在这个示例中,将创建一个名为“WebKiller”的Web应用程序,并在其中添加一个Default.aspx页面。只需要创建一个文本框,用于更改控制台应用程序的app.config文件中的"ApplicationName"键的值,同时创建一个按钮,用于通过点击来执行控制台应用程序。
以下是ASP.NET页面的代码:
<%@ 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:Button ID="Button1" runat="server" Text="Execute" OnClick="Button1_Click" />
</div>
</form>
</body>
</html>
在这一步中,将创建Web应用程序的后台代码。将为之前创建的按钮创建一个事件处理方法,并确保在Visual Studio的事件窗口中创建了空的事件处理方法。
将创建一个void方法来更改控制台应用程序的app.config文件。将在按钮事件方法中调用这个方法。以下是这个方法的代码:
private void ChangeValueOfKeyConfig(string ProcessName)
{
string tAppPath = @"E:\ProcessKiller\ProcessKiller\bin\Debug";
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;
}
}
注意,可以通过RenameItemConfig()方法来更改app.config文件中的键的值。接下来,将填写按钮事件方法。首先,需要获取创建的文本框的值,然后需要定位想要执行的控制台应用程序的路径,然后可以在按钮点击事件方法中调用ChangeValueOfKeyConfig()方法,然后再次打开命令提示符(CMD),并通过CMD执行控制台应用程序。
以下是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:\ProcessKiller\ProcessKiller\bin\Debug";
process.StartInfo.Arguments = "/c \"" + "ProcessKiller.exe\"" ;
process.Start();
}
private void ChangeValueOfKeyConfig(string ProcessName)
{
string tAppPath = @"E:\ProcessKiller\ProcessKiller\bin\Debug";
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;
}
}
}
}
现在可以演示项目了。将强制结束Excel应用程序。所需要做的是:在浏览器中打开/运行Web应用程序,并在输入文本框中填写单词"excel"(全部小写),然后在点击"Execute"按钮之前,打开Microsoft Office Excel,如果Excel打开,点击"Execute"按钮。控制台应用程序将执行它的工作,它将强制关闭/结束Excel。现在,已经完成了,可以做一些更改,可以通过在输入文本框中填写"calc"来关闭计算器应用程序,或者关闭任务管理器的"Processes"选项卡中显示的其他应用程序。