我想运行一个带有命令行参数的 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
}
}
}
}
更新:两者运行的唯一区别是 App.exe 在第一个代码中运行 SessionID=1,而第二个代码在 SessionId=0 下运行。