2011-11-11 40 views
2

我是一名生物信息學人員,我使用C#進行工作。我一直在使用C#中的進程來運行可執行程序幾次。這次我有一個新問題。我在Windows下載了一個名爲Blast的程序的exe文件(http://blast.ncbi.nlm.nih.gov/Blast.cgi?CMD=Web&PAGE_TYPE=BlastDocs&DOC_TYPE=Download)。如果我輸入的命令是:使用C#進程運行可執行程序

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

你有什麼想法我可以解決這個問題嗎?

在此先感謝。

+0

如果您已經從記事本中複製並粘貼了您的參數,那麼他們可能已經保留了編碼。使用notepade保存帶有ansi編碼的文本文件,然後複製這些參數。 – Kell

+1

你確定你應該把「blastp」作爲參數中的第一個單詞嗎?那不是exe名字?該過程現在將調用此命令:C:\ Program Files \ NCBI \ blast-2.2.25 + \ bin \ blastp.exe blastp -query input.txt -db pdbaa -out output.txt –

回答

4

的一個問題,我可以看到的是在該行你設置參數:

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; 

重複兩次?

+0

謝謝。是的問題出現在參數陳述中。我刪除了這個blastp,現在正在工作。 – Reyhaneh