我想运行一个带有命令行参数的GUI程序,它通过添加一些xml标签来处理文本。所以文本必须在文件系统上,并且xml在同一目录中创建。我试过了两个:控制台应用程序和Web服务。为什么WS不起作用?我该如何调试呢?
此代码按我的意思运行:
using System.Diagnostics;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
private static void ExecuteConsoleApp(string filepath)
{
string dir = @"E:\temp\";
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = dir + @"App.exe";
startInfo.Arguments = "EN /R /U /F\"" + filepath + "\"";
Debug.WriteLine(startInfo.FileName + " " + startInfo.Arguments);
using (Process exeProcess = Process.Start(startInfo))
{
exeProcess.WaitForExit(5000); // Wait a while
exeProcess.Kill(); // Then kill
}
}
static void Main(string[] args)
{
ExecuteConsoleApp(@"E:\temp\temp.txt");
}
}
}
为什么这个没有?我的意思是该进程是在Session ID = 0中创建的,但是没有GUI而且没有xml:我不知道发生了什么......
using System.IO;
using System.Diagnostics;
using System.ServiceModel.Activation;
namespace WCF_Exalead
{
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class Service : IService
{
public void GetXml()
{
ExecuteConsoleApp(@"E:\temp\temp.txt");
}
private static void ExecuteConsoleApp(string filepath)
{
string dir = @"E:\temp\";
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = dir + @"App.exe";
startInfo.Arguments = "EN /R /U /F\"" + filepath + "\"";
Debug.WriteLine(startInfo.FileName + " " + startInfo.Arguments);
using (Process exeProcess = Process.Start(startInfo))
{
exeProcess.WaitForExit(5000); // Wait a while
exeProcess.Kill(); // Then kill
}
}
}
}
更新:两次运行之间的唯一区别是当第二个运行SessionId = 0时,App.exe在SessionID = 1的第一个代码中运行。
答案 0 :(得分:1)
这不是Web服务的工作方式。名称“Web服务”和“Windows服务”确实非常相似,但它们是非常不同的应用程序类型。
Web服务没有UI。它是一个位于Web服务器上并公开方法的应用程序。您可以使用各种通信协议(如SOAP)通过http调用这些方法,它们将返回数据。
如果您愿意,本文将介绍如何使用Web服务。 Introduction to Web Services