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

时间:2011-11-11 13:08:45

标签: c# process executable

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

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();
    }

你知道我怎么能解决这个问题吗?

提前致谢。

1 个答案:

答案 0 :(得分:4)

我可以看到的一个问题是你设置Arguments的行:

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

我认为你的意思是:

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

所以你不需要在Arguments中再次指定可执行文件名 - 这就是FileName的用途。

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

另外,为什么是行

proc.StartInfo.RedirectStandardError = true;

重复两次?

相关问题