无法写入进程C#Mono的输入

时间:2013-03-14 00:43:35

标签: c# linux shell mono

我在尝试将输入写入linux进程时遇到问题。代码在这里:

        System.Diagnostics.Process process = new System.Diagnostics.Process();
        process.StartInfo.WorkingDirectory = "'/home/"+user+"/pacotes/"+nome_pacote.Text+"-1.0/'";
        process.StartInfo.FileName="dh_make";
        process.StartInfo.Arguments="-n -s";
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.RedirectStandardInput = true;
        process.Start();
        Thread.Sleep(3000);
        process.StandardInput.WriteLine();

这就是错误:

  

System.IO.IOException:在路径上写入错误/ home / vinholi / Ubuntu One / Uso do linux em flash drives / Programa gerador de .deb / GeradorDeb / GeradorDeb / bin / Debug / [Unknown]     在System.IO.FileStream.FlushBuffer(System.IO.Stream st)[0x00000] in:0     在System.IO.FileStream.FlushBuffer()[0x00000]中:0     在System.IO.FileStream.Dispose(布尔处理)[0x00000]中:0

4 个答案:

答案 0 :(得分:2)

此错误的一个可能解释是,在您尝试写入该进程之前,该进程已退出。我使用/bin/date和合法StartInfo.WorkingDirectory尝试了此操作,程序集为/Workspace/export/misc/H.exe。这会产生:

Unhandled Exception:
System.IO.IOException: Write fault on path /Workspace/export/misc/[Unknown]
  at System.IO.FileStream.WriteInternal (System.Byte[] src, Int32 offset, Int32 count) [0x00097] in /Workspace/mono/mcs/class/corlib/System.IO/FileStream.cs:658 
  at System.IO.FileStream.Write (System.Byte[] array, Int32 offset, Int32 count) [0x000aa] in /Workspace/mono/mcs/class/corlib/System.IO/FileStream.cs:634 
  at System.IO.StreamWriter.FlushBytes () [0x00043] in /Workspace/mono/mcs/class/corlib/System.IO/StreamWriter.cs:222 
  at System.IO.StreamWriter.FlushCore () [0x00012] in /Workspace/mono/mcs/class/corlib/System.IO/StreamWriter.cs:203 
  at System.IO.StreamWriter.Write (System.Char[] buffer) [0x00022] in /Workspace/mono/mcs/class/corlib/System.IO/StreamWriter.cs:351 
  at System.IO.TextWriter.WriteLine () [0x00000] in /Workspace/mono/mcs/class/corlib/System.IO/TextWriter.cs:257 
  at X.Main () [0x00066] in /Workspace/export/misc/H.cs:17 

每次在process.StartInfo.WorkingDirectory中使用无效目录时,都会收到此消息。虽然错误信息应该更清楚,但是没有什么可以做的。

由于引号,您的目录无效。您也不应该以您的方式连接路径名,因为它使您的应用程序不可移植到非Unix操作系统。相反,将其写为:

var home = Environment.GetFolderPath (Environment.SpecialFolder.UserProfile);
process.StartInfo.WorkingDirectory = Path.Combine (home, "pacotes", nome_pacote.Text+"-1.0");

使用Environment.GetFolderPath()可以更轻松地在Mac上运行您的应用程序(主目录位于/Users/<username>而不是/home/<username>)。

答案 1 :(得分:0)

另一种可能性是你正在启动的二进制文件是一个悬空的符号链接。检查二进制文件是否存在,或者是指向有效二进制文件的符号链接。

答案 2 :(得分:0)

正如另一个回应所说的那样“这个错误的一个可能的解释是在您尝试写入之前退出了该过程。”

这就是我遇到的问题 - 即使在设置了另一个答案中描述的WorkingDirectory之后。在同样的情况下:C#,Mono,Ubuntu。

最终,我的解决方案是设置Arguments以便进程不会退出,并且真正尝试从StandardInput读取输入。

答案 3 :(得分:-2)

您尝试写的路径也无法写入。 “/ home / vinholi / Ubuntu One / Uso do linux em flash drives / Programa gerador de .deb / GeradorDeb / GeradorDeb / bin / Debug /”

看起来像是一个USB驱动器。请检查以下内容:

  1. 它不是只读。
  2. 它没有安装只读。
  3. USB驱动器没有空间。