c# - 使用 C# Process 运行可执行程序

标签 c# process executable

我是一名生物信息学人员,我使用 C# 进行工作。我已经多次使用 C# 中的进程来运行可执行程序。这次我有一个新问题。我在 Windows 中下载了一个名为 Blast 的 exe 文件( http://blast.ncbi.nlm.nih.gov/Blast.cgi?CMD=Web&PAGE_TYPE=BlastDocs&DOC_TYPE=Download )。如果我输入我的命令:

blastp -query input.txt -db pdbaa -out output.txt

效果很好。但是当我从记事本复制粘贴命令时,会出现错误。我搜索了这个问题,发现这是一个“编码问题UTF-8与ISO-latin”( http://biostar.stackexchange.com/questions/7997/an-error-by-using-ncbi-blast-2-2-25-on-windows ),这是由复制和粘贴引起的。

现在我想从 c# 运行进程来调用 exe 文件,我遇到了同样的问题,我猜这是因为该进程执行了复制和粘贴之类的操作。这是我的代码:

 public void Calculate()
    {
        Process proc = new Process();
        proc.StartInfo.WorkingDirectory = Program.NCBIBlastDirectory;
        proc.StartInfo.FileName = @"C:\Program Files\NCBI\blast-2.2.25+\bin\blastp.exe";
        proc.StartInfo.Arguments = "blastp -query input.txt -db pdbaa -out output.txt";
        proc.StartInfo.UseShellExecute = false;
        proc.StartInfo.RedirectStandardError = true;
        proc.StartInfo.RedirectStandardError = true;
        proc.Start();
        proc.WaitForExit();
        proc.Close();
    }

你知道我该如何解决这个问题吗?

提前致谢。

最佳答案

我看到的一个问题是在设置参数的行中:

proc.StartInfo.Arguments = "blastp -query input.txt -db pdbaa -out output.txt";

我想你的意思是:

proc.StartInfo.Arguments = "-query input.txt -db pdbaa -out output.txt";

因此您无需在参数中再次指定可执行文件名称 - 这就是 FileName 的用途。

另一件事是,如果不使用 shell-execute 来启动许多应用程序,它们的行为就不会很好。首先使用 shell-execute 尝试一下(显然没有重定向任何 std*),如果它以这种方式工作,那么你就会知道问题是什么 - 尽管我担心你对此无能为力。

另外,为什么是这条线

proc.StartInfo.RedirectStandardError = true;

重复两次?

关于c# - 使用 C# Process 运行可执行程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8094428/

相关文章:

linux - 是否可以在 Linux 中编译独立的 Fortran 可执行文件?

c# - 如何使用 iText7 设置 pdf 文档第一页的上边距?

c# - MATLAB 通过 .NET 调用使用的内存是否独立于 .NET 应用程序?

android - SharedPreferences 的 MODE_MULTI_PROCESS 是否不如 MODE_PRIVATE 安全

c++ - 如何在 VC++ 2010 中使用 .dll 文件启动进程

python - 如何在python脚本中获取exe的输出?

perl - PAR::Packer 是如何工作的?

c# - CLSCompliant 属性是否关心旧版本的 .NET 语言?

c# - 无法运行负载测试,因为 Visual Studio 使用 xml 编辑器打开它们

c - 如何在我自己的 C shell 中正确等待前台/后台进程?