2012-06-06 91 views
0

我試圖從C#程序執行.cmd進程。當我運行在命令行的過程中,即。在C#執行CMD莫名其妙地失敗

C:\Directory\Process.cmd -x 1000 -y 1000 C:\Input\input.txt 

我得到相應的結果(在這種情況下,這意味着過程中文件寫入到:

C:\Output\output.txt 

然而,當我嘗試。從運行一個簡單的C#程序這一過程中,不創建輸出文件下面是一些我嘗試:

嘗試1)

try 
{ 
    string processName = @"C:\Directory\Process.cmd"; 
    string argString = @" -x 1000 -y 1000 C:\Input\input.txt"; //The extra space in front of the '-x' is here on purpose 
    Process prs = new Process(); 
    prs.StartInfo.UseShellExecute = false; 
    prs.StartInfo.RedirectStandardOutput = false; 
    prs.StartInfo.FileName = processName; 
    prs.StartInfo.Arguments = argString; 
    prs.StartInfo.WindowStyle = ProcessWindowStyle.Normal; 

    prs.Start() 
} 
catch (Exception e) 
{ 
    Console.Writeline(e.Message); 
} 

嘗試2)

try 
{ 
    System.Diagnostics.Process.Start(@"C:\\Directory\\Process.cmd", " -x 1000 -y 1000 C:\\Input\\input.txt"; 
} 
catch (Exception e) 
{ 
    Console.Writeline(e.message); 
} 

現在,在這兩種情況下,沒有異常拋出,並Process.cmd被訪問(它打印在shell狀態更新),但這個過程不會產生任何輸出文件。我嘗試調用Process.cmd的方式有什麼問題,當它直接從命令行運行時它可以正常工作,但是當我嘗試從我的C#程序調用它時不能正常工作?

+1

你可以發佈process.cmd內容嗎? –

+0

不幸的是我不能(我沒有訪問它)。我知道process.cmd調用一個處理數據併產生輸出的Java應用程序。 – gfppaste

+1

該進程是否需要管理員權限才能執行並寫入輸出?你有沒有檢查過C#程序是否以正確的權限運行? – Ani

回答

0

所以,我終於能得到我的手的源代碼,並意識到問題是在Java碼...它將解釋項目目錄作爲輸出目錄。謝謝你們所有的幫助,你們給了一些非常有用的信息!

1

該文件可能正在創建,但不是您的想法。使用

prs.StartInfo.WorkingDirectory = "yourpath" 

http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.workingdirectory.aspx

的WorkingDirectory屬性必須設置,如果用戶名和密碼提供 。如果該屬性未設置,則默認工作目錄爲 %SYSTEMROOT%\ system32。

如果該目錄已經是系統路徑變量的一部分,那麼您不需要在該屬性中重複該目錄的位置 。

當UseShellExecute 爲true時,UseShellExecute爲false時,WorkingDirectory屬性的行爲將有所不同。當UseShellExecute爲 true時,WorkingDirectory屬性指定 可執行文件的位置。如果WorkingDirectory是一個空字符串,則當前的 目錄被理解爲包含可執行文件。

當UseShellExecute爲false時,用於查找可執行文件的WorkingDirectory屬性不是 。相反,它由 啓動的進程使用,並且僅在新進程的上下文中具有含義。

我刪除了這個認識到的路徑傳遞作爲一個參數,並可能使用硬編碼路徑邏輯,其寫入文件後,但由於評論引用了這一點,我會在情況下取消刪除它仍然有幫助。

2

你的這個?

System.Diagnostics.Process.Start("cmd.exe", @"/c C:\Directory\Process.cmd -x 1000 -y 1000 C:\Input\input.txt"); 

據我所知,「@」預先考慮逐字字符串,至極並不需要反斜線屏蔽)

相關問題