我有一個bat文件,可以將文件從一個位置複製到另一個位置。如何在C中使用所需的權限運行bat文件#
SET SRC=%1
SET DEST=%2
xcopy /Y/I %SRC%\*.txt %DEST%\temp
echo Done!
我試圖通過運行C#程序文件
var psi = new ProcessStartInfo(fileToRun);
psi.Arguments = args;
psi.RedirectStandardOutput = true;
psi.RedirectStandardError = true;
psi.WindowStyle = ProcessWindowStyle.Hidden;
psi.UseShellExecute = false;
psi.CreateNoWindow = true;
Process cmdProc = Process.Start(psi);
StreamReader output = cmdProc.StandardOutput;
StreamReader errors = cmdProc.StandardError;
cmdProc.WaitForExit();
蝙蝠文件執行,我可以看到「完成!」消息在輸出中,但文件不會被複制。
它的工作的唯一辦法是
psi.UseShellExecute = true;
psi.RedirectStandardOutput = false;
psi.RedirectStandardError = false;
但在這種情況下,我必須禁用輸出/錯誤的重定向,我需要他們。 所以這不適合我。
我已經嘗試設置管理員的用戶名/密碼
psi.UserName = username;
psi.Password = password;
登錄成功,但我得到「的句柄無效」消息在StandardError的流。
我想我試圖運行的進程沒有複製文件的權限和 我不知道如何授予他這些權限。
請幫忙!
EDITED
感謝您的答覆! 我花幾個小時試圖處理這個問題,因爲它總是會發生的我已經張貼了我的問題,並找到了解決辦法:)
爲了避免讓「句柄無效」你必須
psi.RedirectStandardInput = true;
消息
但是現在我可以看到cmd.exe窗口,如果設置了UserName,這是不好的。
工作在情況下您捕獲XCOPY'的'輸出它說什麼了?如果權限是問題,它應該包括「拒絕訪問」(或拒絕訪問您的語言)。 –
它什麼也沒說,默默地失敗,在標準錯誤流中沒有錯誤。 – Igor
暫時將'XCOPY'的'ECHO'面前。 ouptut是否顯示您期望的命令行(源/目標目錄等)? –