いくつかの xml タグを追加してテキストを処理するコマンドライン引数を使用して GUI プログラムを実行したいと考えています。したがって、テキストはファイルシステム上にある必要があり、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");
}
}
}
なぜこれはしないのですか?つまり、プロセスはセッション 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 の最初のコードで実行され、2 番目のコードが SessionId=0 で実行されることです。