我正在尝试使用简单的代码调用应用程序,例如
public void Run(string command)
{
Process proc = new Process();
proc.StartInfo.FileName = "acvTemp.exe";
proc.StartInfo.Arguments = command;
proc.Start();
proc.WaitForExit();
}
我正在启动的 fileName 进程实际上会生成一个新窗口。它使用一些使其无法退出的命令启动。IE
command = acvtest.exe /launch /wait /log:<temp.log>
所以 acvtest.exe 开始在机器上运行,实际上仍在运行,所以我可以运行其他命令,如
acvtest.exe /getid:<name>
这就是我将手动使用该应用程序的方式。
acvtest.exe /launch /wait /log:<temp.log>
acvtest.exe /getid:<name>
注意实际的 /launch 进程返回到 shell 命令提示符,因为 /launch 会打开一个新的命令窗口,并且 /getid 的输出实际上会写入日志。
我的问题是,当第一个 /launch 或 /getid 命令运行时,waitforexit() 似乎在日志上释放句柄之前就退出了。(可能在某些子线程退出之前?)
即以下命令失败,直到我在两者之间放置一些睡眠或等待。即使使用 waitforexit()
Run("/launch /wait /log:<temp.log>");
Run("/getid:<name>");
Run("shutdown");
//Needs some sleep or wait here
using (StreamReader reader = new StreamReader("temp.log"))
{
Console.WriteLine(reader.ReadToEnd());
}
在上述两个部分之间没有任何睡眠或等待,访问日志将失败,并显示它已被另一个进程使用。看起来应用程序甚至在它实际完成其进程之前就退出了。这是应用程序的问题吗?我能做些什么来解决它?
我怀疑我可能需要一些不同的 Run() 代码,因为启动了一个新的 shell。
[更新]
问题不仅在于日志文件。当我在说大约 100,000 个文件名上运行 Run("/getid:") 时,其中许多都因“资源不可用”错误而失败,这就是为什么我认为应用程序可能在释放其资源之前就退出了看着。