代码之家  ›  专栏  ›  技术社区  ›  Dinesh

Java和.NET互操作性

  •  0
  • Dinesh  · 技术社区  · 14 年前

    我有一个C程序,通过这个程序我可以打开一个进程的命令窗口。在这个命令窗口中,我正在运行一个批处理文件。我正在将该批处理文件命令的输出重定向到文本文件。当我运行应用程序时,一切似乎都正常。

    但很少有时候,应用程序会出现一些错误,比如“无法访问文件”。另一个应用程序正在使用它“同时,命令窗口没有关闭。如果我们通过任务管理器关闭cmd进程,那么它会将内容写入文件并关闭。即使我关闭了cmd进程,仍然没有释放文件句柄。这样下次我就不能运行应用程序了。总是说不能访问文件。只有重新启动系统后,它才能工作。

    这是我的代码:

    Process objProcess = new Process();
    ProcessStartInfo objProInfo = new ProcessStartInfo();
    objProInfo.WindowStyle = ProcessWindowStyle.Maximized;
    objProInfo.UseShellExecute = true;
    objProInfo.FileName = "Batch file path"                
    objProInfo.Arguments = "Some Arguments";
    if (Directory.Exists(strOutputPath) == false)
    {
      Directory.CreateDirectory(strOutputPath);
    }               
    objProInfo.CreateNoWindow = false;
    objProcess.StartInfo = objProInfo;                
    objProcess.Start();                
    objProcess.WaitForExit();
    

    测试:

     java classname argument > output.txt
    

    我的问题是:

    1. 我无法追踪问题在哪里。

    2. 我们如何看到保存在Ant文件上的句柄的过程。

    3. 对于Java和.NET互操作性有什么建议吗?

    3 回复  |  直到 14 年前
        1
  •  1
  •   Artiom Chilaru    14 年前

    在这种情况下,我会启动 Process Explorer (通过SysInternals,Awesome工具btw)单击ctrl+f,然后输入文件名。它将在所有正在运行的进程中进行搜索,并按打开该文件的应用程序列出该文件的文件句柄。

    然后,你可以放下手柄,或者终止应用程序——无论你认为哪个更好)

        2
  •  0
  •   arunmur    14 年前

    您可以尝试从C分叉并附加文件描述符,而不是启动BAT文件。

        3
  •  0
  •   Graviton    14 年前

    我认为问题是因为当C语言程序在上面写东西时,Java程序正在访问文本文件,因此“文件不能访问”问题。

    如果我是你,我会用C语言做所有的事情,我不会用Java来读取C语言程序的状态。只有当我完成了C需要做的一切之后,我才能访问这个文件。

    为了查看锁定文件的过程,可以使用 Process Explorer 为此目的。