2017-02-28 124 views
1

我有C#程序,它找到插入USB的驅動器盤符並將其分配給變量_usbDriveLetter從C#執行.cmd文件,沒有任何彈出窗口

我需要將_usbDriveLetter的值傳遞給批處理文件,該文件會進一步執行CHKDSK _usbDriveLetter命令。

我有以下代碼來傳遞_usbDriveLetter的值並執行該批處理文件。

 string _usbDriveLetter = @"F:\"; //For testing here 
     string MyBatchFile = @"<FILEPATH>\chkdsk.cmd"; 

     ProcessStartInfo proc = new ProcessStartInfo(); 
     proc.CreateNoWindow = true; 
     proc.FileName = MyBatchFile; 
     proc.Arguments = usbDriveLetter ; 
     Process.Start(proc); 

問題:一旦代碼到達行執行批處理,出現下列窗口允許的CMD.exe啓動。我如何在後臺/無聲中執行執行(至少在沒有任何用戶交互的情況下)。

enter image description here

+2

要麼禁用UAC,要麼以高提升權限啓動主程序 – dcg

+0

我已經在.cmd文件中提升了用戶權限。用提升權限運行我的應用程序是不可能的。 – skm

+3

如果UAC打開,它需要用戶交互,這就是整個問題。你會一直得到這樣的提示。 – Equalsk

回答

1

這應該工作。

Process runprogram = new Process(); 
          ProcessStartInfo programinfo = new ProcessStartInfo(); 
          programinfo.WindowStyle = ProcessWindowStyle.Hidden; 
          programinfo.CreateNoWindow = true; 
          programinfo.UseShellExecute = false; 
          programinfo.RedirectStandardOutput = true; 
          programinfo.FileName = "cmd.exe"; 
          programinfo.Arguments = " /C \"<FILEPATH>\chkdsk.cmd\""; 
          runprogram.StartInfo = programinfo; 
          runprogram.Start(); 

還要求首次運行程序時的特權提升。

+0

謝謝,但它不會解決問題,因爲我的問題不是控制檯窗口。我的問題是Windows彈出消息。顯然,除了使用提升的權限運行我的.exe或更改UAC設置外,沒有解決此問題的方法。 – skm

+0

@skm我剛測試過它,它確實有效? 在您的應用程序中添加一個執行級別設置爲highestAvailable的清單文件並使用該代碼。 –

+0

你能否爲此提供樣本清單? – skm