2010-11-19 173 views
7

我試圖通過使用Process.Start從C#運行外部問題,但我遇到了權限問題。當我通常打開一個命令提示符(而不是管理員)並運行我的命令時,它們工作正常,但是當我通過Process.Start打開命令提示符時,在目錄上出現寫入錯誤。 (「我不能寫在文件test.log」)
如果我通過Process.Start作爲管理員運行它工作正常,但我得到的權限彈出。有沒有人有任何想法可以幫助我解決這個問題?謝謝!Process.Start權限問題

這裏是我使用的代碼:

Process proc = new Process(); 
proc.StartInfo.FileName = @"cmd.exe"; 
proc.StartInfo.Arguments = @"/k latex C:\Users\Shane\Documents\test.tex"; 
proc.Start(); 
proc.WaitForExit(); 
+1

爲什麼你需要通過cmd.exe打包你的程序? – 2010-11-19 07:41:56

回答

7

我不知道它是否正試圖寫一個診斷日誌對於當前工作目錄中,您可能沒有權限。 (我不知道它是否會繼承工作目錄,或者是包含cmd.exe的目錄。)我建議你使用ProcessStartInfo.WorkingDirectory指定新進程的工作目錄。 (順便說一下,我個人覺得創建一個新的ProcessStartInfo一個填充項--C#對象初始值設定項使這個特別好),然後調用Process.Start(ProcessStartInfo)來啓動它。否則,看起來已經有一個過程,當時還沒有一個過程。只是MHO,但可能與您正在研究的問題無關)。

+0

太棒了!我沒有意識到,以這種方式開始工作目錄可能會有所不同。我改變了工作目錄到我的tex文件,它的工作。謝謝! – 2010-11-19 16:16:06

1

而不是使用cmd.exe作爲Process對象的FileName屬性,請將您的命令保存在一個批處理文件中,然後使用該文件執行。

此外,您還可以通過Process類的StartInfo屬性提及管理員的權限,如用戶名,密碼,域等。如果你使用這些屬性,我認爲權限問題不會出現。 Here你可以找到更多關於StartInfo屬性的信息。

希望它有幫助。