【问题标题】:process.start() method is not producing filesprocess.start() 方法不生成文件
【发布时间】:2017-06-09 05:45:21
【问题描述】:

我有一个 .exe 文件。我想用Process.Start() 命令运行.exe 文件。 .exe 文件在执行时会产生两个文件,一个是 .xls 文件,另一个是 .htm 文件。当我通过.net代码运行.exe文件时,应该生成的两个文件没有生成。以下是我的代码:

 static void Main(string[] args)
    {
        Process.Start(@"C:\Test\test.exe");
}

我不确定进程是否正在执行,但我没有看到任何错误。另外,我没有看到任何文件产生。如果我手动运行该过程,那么我可以看到在 .exe 文件所在的同一文件夹中生成的两个文件。

任何帮助将不胜感激。

【问题讨论】:

  • 你能用try catch换行看看是否有异常发生吗?
  • 如果你只是双击Windows资源管理器中的exe,会发生什么?它会生成您的文件吗?如果不是,我不希望调用 Process.Start 会有所不同。
  • “我可以看到在 .exe 文件所在的同一个文件夹中生成的两个文件”。 Test.exe 如何确定在哪里创建文件?如果它基于某个当前目录,那么它们可能是在您的 bin 文件夹中创建的,而不是在可执行文件所在的位置。

标签: c#


【解决方案1】:

尝试等待进程完成:

Process.Start(@"C:\Test\test.exe").WaitForExit();

更适合调试:

Process process = Process.Start(@"C:\Test\test.exe");
int id = process.Id;
Process runningProc = Process.GetProcessById(id);
runningProc.WaitForExit();

【讨论】:

  • 你为什么要做Process.GetProcessById(id);的额外步骤,为什么不只是process.WaitForExit()
  • Process.GetProcessById(id); 如果找不到 id 则会引发异常。这允许您检查进程是否实际运行。
  • 如果你有一个通过process.Id 的 id,这意味着它在某个时候正在运行。如果程序没有运行,你不会得到一个 id。
  • 谢谢。这解决了我的两个问题。我试图在生成文件后将其复制到粉碎驱动器。 WaitforExit 解决了这个问题。再次感谢您
  • @ScottChamberlain 如果你在这一行设置断点int id = process.Id; 或在其后插入Thread.Sleep(x);,你可以等待特定时间检查它是否仍在运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-13
  • 2015-02-06
  • 1970-01-01
  • 2017-07-16
  • 1970-01-01
  • 2012-10-31
  • 1970-01-01
相关资源
最近更新 更多