我在尝试将输入写入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
答案 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驱动器。请检查以下内容: