2014-01-12 55 views
4

從提升的命令提示符運行bcdedit.exe時,可以看到當前BCD設置的值。我需要閱讀「hypervisorlaunchtype任何使用.NET以編程方式從Bcedit.exe獲取值/設置的方法?

Screenshot

有誰知道一個辦法做到這一點的設置/值?

我試圖寫管道輸出到一個tmp文件,以便我可以解析它,但由於事實bcdedit.exe需要從提升的提示運行,因此遇到管道輸出問題。也許有更好的方法?

編輯:我忘了補充一點,我希望能夠在最終用戶完全看不到命令​​提示符(即使不是快速閃爍)的情況下執行此操作。

+0

你試圖從不與管理員權限運行的應用程序獲得這些價值? – MarcinJuraszek

+0

我可以做到這一點,無論哪種方式最好。 –

+0

我想你可以使用[Process.StandardOutput](http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput(v = vs.110).aspx ) –

回答

2

首先,運行您的Visual Studio作爲管理員,並嘗試在一個控制檯應用程序代碼(運行與調試應用程序):

static void Main(string[] args) 
    { 

     Process p = new Process(); 
     p.StartInfo.UseShellExecute = false; 
     p.StartInfo.RedirectStandardOutput = true; 
     p.StartInfo.RedirectStandardError = true; 
     p.StartInfo.FileName = @"CMD.EXE"; 
     p.StartInfo.Arguments = @"/C bcdedit"; 
     p.Start(); 
     string output = p.StandardOutput.ReadToEnd(); 
     p.WaitForExit(); 

     // parse the output 
     var lines = output.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries).Where(l => l.Length > 24); 
     foreach (var line in lines) 
     { 
      var key = line.Substring(0, 24).Replace(" ", string.Empty); 
      var value = line.Substring(24).Replace(" ", string.Empty); 
      Console.WriteLine(key + ":" + value); 
     } 
     Console.ReadLine(); 
    } 

然而,有一個問題,如果你想啓動的時候這個工作從高架的Visual Studio之外的應用程序,你需要配置你的應用程序,要求提升權限:

在您的項目,單擊添加新的項目,然後選擇應用程序清單文件。

打開app.manifest文件,並替換此行:

<requestedExecutionLevel level="asInvoker" uiAccess="false" /> 

這一個:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
+0

謝謝,這個工程很好,但它從BCDedit.exe讀取信息時閃爍命令提示符。我忘了提及我希望它對用戶保持隱藏,因爲我正在爲它做一個GUI,並且總是閃爍命令窗口是icky。 =)我更新了我的問題以反映這一點。這似乎是使用UseShellExecute值的問題。有關解決方法的任何想法? –

+1

@ J.ScottElblein您是否嘗試過使用'ProcessStartInfo'並設置'CreateNoWindow = true'? –

+0

你也可以試試這個:p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; – Cosmin

相關問題