使用c#进程运行可执行程序

本文关键字:可执行程序 运行 进程 使用 | 更新日期: 2023-09-27 18:14:05

我是一个生物信息学的人,我使用c#进行我的工作。我已经多次使用c#中的进程来运行可执行程序。这次我有新问题。我在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();
    }
你知道我该怎么解决这个问题吗?

使用c#进程运行可执行程序

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

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;

重复两次?