2013-01-19 13 views
0

我正在製作技術含量的工具程序,包括在這個「工具箱」將運行在本地磁盤碎片整理按鈕磁盤。目前我已經爲這個做批處理文件很簡單,它只是運行一個基本的碎片分析:的Windows碎片整理不被識別爲一個內部或外部命令,可操作的程序或批處理文件

defrag C: /A 

按鈕背後的C#代碼觸發是這樣的:

System.Diagnostics.ProcessStartInfo procInfo = 
    new System.Diagnostics.ProcessStartInfo(); 
procInfo.Verb = "runas"; 
procInfo.FileName = "(My Disk):\\PreDefrag.bat"; 
System.Diagnostics.Process.Start(procInfo); 

此代碼不正是我想要的是,它調用UAC然後啓動我的批處理文件與管理權限。儘管曾是該批處理文件運行,我收到的命令控制檯輸出爲:

C:\Windows\system32>defrag C: /A 
'defrag' is not recognized as an internal or external command, 
    operable program or batch file. 

是什麼原因導致這個錯誤,我該如何解決?

+0

請發佈您的PreDefrag.bat文件的內容。你在使用什麼操作系統? Windows 7的? Windows Vista? Windows家庭高級版? Windows XP? Windows 2000? –

回答

2

檢查,以確保您的DEFRAG.EXE文件確實存在在C:\ Windows \ System32下。

嘗試完全限定的「碎片整理」命令爲:

C:\WINDOWS\system32\defrag.exe C: /A 

打開一個命令提示符並運行此命令:在你得到什麼的問題defrag.exe /?和崗位。

+2

或將進程的工作目錄設置爲'Environment.GetFolderPath(Environment.SpecialFolder.System)' – abatishchev

+0

將.exe添加到批處理文件中的碎片整理的末尾來修復所有內容。太棒了,謝謝你。 –

1

首先:將yout項目Platform Target屬性設置爲Any CPU並取消Prefer 32-bit選項(99.9%這是問題)。那麼......爲什麼開始一個調用命令的批處理時,你可以這樣做?

ProcessStartInfo info = new ProcessStartInfo(); 
info.Arguments = "/C defrag C: /A"; 
info.FileName = "cmd.exe"; 
info.UseShellExecute = false; 
info.Verb = "runas"; 
info.WindowStyle = ProcessWindowStyle.Hidden; 

Process.Start(info); 

工程就像我的機器上的魅力。對於多個命令:

ProcessStartInfo info = new ProcessStartInfo(); 
info.FileName = "cmd.exe"; 
info.RedirectStandardInput = true; 
info.UseShellExecute = false; 

Process cmd = Process.Start(info); 

using (StreamWriter sw = p.StandardInput) 
{ 
    if (sw.BaseStream.CanWrite) 
    { 
     sw.WriteLine(command1); 
     sw.WriteLine(command2); 
     // ... 
+0

有沒有辦法發出多個命令? –

+0

當然,我編輯了我的答案。 –

+0

爲什麼,當我用你的代碼運行多個命令,我不能使用「運行方式」 我相信,如果我可以將工作的偉大,但是當我在爲代碼添加,它不拉了UAC 。 –

相關問題