【问题标题】:Cannot Delete File Within A Child Process Started From A C# App无法删除从 C# 应用程序启动的子进程中的文件
【发布时间】:2009-10-20 19:48:16
【问题描述】:

如何在 UseShellExecute 设置为 false 的情况下从 C# 调用子进程并允许删除文件?

子进程是一个java程序,创建一个0字节的文件,传输到远程服务器,然后删除。当我从 Windows 命令行执行 java 程序时,此功能有效。

如果我使用 System.Diagnostics.Process 实例从 C# 调用 java 程序,并将 StartInfo.UseShellExecute 设置为 false,则子进程不会删除该文件。事实上,处理停止并且没有任何反应。如果 Process 对象的 StartInfo.UseShellExecute 属性设置为 true,则子进程可以删除文件,并且父进程的执行继续进行。但是,我需要将 UseShellExecute 属性设置为 false,这样我才能重定向子进程的输出。

【问题讨论】:

  • 我发现java进程在删除文件之前就停止了。有关详细信息,请参阅下面我对 Tim 的回答的评论。我应该根据我掌握的新信息删除这篇文章吗?
  • 如果问题与文件删除无关,则问题不再准确。您可以只编辑它,但由于您要完全更改它,最好删除它并创建一个新的,以便它显示在“新”部分。

标签: c# java file-io


【解决方案1】:

这听起来可能是原因吗?

http://hackage.haskell.org/trac/ghc/ticket/2650

(或者,更具体地说,从那里链接的Java issue

我前段时间遇到了类似的问题,结果是意外的句柄继承引起的,但我不太明白这会如何导致您描述的问题。

【讨论】:

  • 发布我的问题后,我发现 java 进程在删除文件之前就停止了!我不知道如何调试子进程,所以我正在插入日志语句。 java 进程在进行同步调用以获取 java.util.Collection 引用时终止。感谢您的帮助。
  • 不确定您使用的是什么进行 Java 开发,但在 NetBeans 中,您可以使用“调试”菜单中的“附加调试器”命令来调试已经启动的进程。
猜你喜欢
  • 1970-01-01
  • 2023-03-12
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-08
  • 1970-01-01
相关资源
最近更新 更多