【发布时间】:2011-01-21 08:05:43
【问题描述】:
我写了两个 Windows 控制台应用程序如下
class ProgramA
{
static void Main(string[] args)
{
FileStream fs = File.Open(@"E:\console.txt", FileMode.OpenOrCreate);
StreamWriter sw = new StreamWriter(fs);
TextWriter old = Console.Out;
Console.SetOut(sw);
Console.WriteLine("Process A Started " + DateTime.Now.ToString());
sw.Flush();
Process p = new Process();
ProcessStartInfo pi = new ProcessStartInfo();
pi.FileName = @"D:\ProgramB.exe";
p.StartInfo = pi;
pi.UseShellExecute = true;
pi.RedirectStandardOutput = false;
bool result = p.Start();
Console.WriteLine("Process A Ended " + DateTime.Now.ToString());
sw.Flush();
}
}
和
class ProgramB
{
static void Main(string[] args)
{
try
{
FileStream fs = File.Open(@"E:\console.txt", FileMode.OpenOrCreate);
StreamWriter sw = new StreamWriter(fs);
TextWriter old = Console.Out;
Console.SetOut(sw);
Console.WriteLine("Process B output " + DateTime.Now.ToString());
sw.Flush();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
它们是完全不同的 exe 文件。当我用 F5 一步步调试 ProgramA 时,E:\console.txt 中的结果是
流程 A 开始于 2/26/2010 13:43:59 过程 A 结束于 2/26/2010 13:44:03
但是如果我只是用 Ctrl+F5 运行 ProgramA,E:\console.txt 中的结果是
过程 B 输出 2/26/2010 13:48:50 过程 A 结束于 2/26/2010 13:48:50
我很困惑。最初,我想让 2 个进程都写入同一个文件。但是经过一番思考,我想既然进程A首先控制了console.txt,那么进程B应该无法访问console.txt,结果应该类似于下图:
流程 A 开始于 2/26/2010 13:43:59 过程 A 结束于 2/26/2010 13:44:03
进程 B 抛出拒绝访问异常。但事实并非如此。为什么? “进程 A 已启动”消息在哪里?
我将代码更改为以下内容:
class ProgramA
{
static void Main(string[] args)
{
FileStream fs = File.Open(@"E:\console.txt", FileMode.OpenOrCreate);
StreamWriter sw = new StreamWriter(fs);
TextWriter old = Console.Out;
Console.SetOut(sw);
Console.Write("aaaaa");
Console.Write("AAAAA");
sw.Flush();
Process p = new Process();
ProcessStartInfo pi = new ProcessStartInfo();
pi.FileName = @"D:\ProgramB.exe";
p.StartInfo = pi;
pi.UseShellExecute = true;
pi.RedirectStandardOutput = false;
bool result = p.Start();
Console.Write("aaaaa");
sw.Flush();
}
和
class ProgramB
{
static void Main(string[] args)
{
try
{
FileStream fs = File.Open(@"E:\console.txt", FileMode.OpenOrCreate);
StreamWriter sw = new StreamWriter(fs);
TextWriter old = Console.Out;
Console.SetOut(sw);
Console.Write("bbb");
sw.Flush();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
console.txt的内容是
bbbaaAAAAAAaaaaa
也许这可以解释一些事情。我在想办法。
谢谢。
【问题讨论】:
标签: c# operating-system