2011-12-31 60 views
5

我想用下面的代碼運行cmd命令:運行提升過程

ProcessStartInfo cmd = new ProcessStartInfo("cmd.exe"); 
cmd.RedirectStandardInput = true; 
cmd.RedirectStandardOutput = true; 
cmd.RedirectStandardError = true; 
cmd.UseShellExecute = false; 
cmd.CreateNoWindow = true; 
cmd.WindowStyle = ProcessWindowStyle.Hidden; 
Process exec = Process.Start(cmd); 
exec.StandardInput.WriteLine("sc create \"BaliService\" binPath= \"{0}\\BaliService.exe\"", Directory.GetCurrentDirectory()); 

這個命令需要管理員privelages,如果我下運行cmd以管理員身份,然後鍵入命令它完美,但不是當我運行這個應用程序爲管理員我已經加入

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

到UAC提示每次我打開exe文件時的清單文件。

我已經看到了這個問題的多個問題,他們似乎都建議任何進程運行在高架應用程序將具有相同的權利,但這不適合我。我試過cmd.Verb = "runas";但沒有骰子。

+0

嘗試改變'cmd.UseShellExecute'到TRUE;並保持'runas'動詞。 – keyboardP 2011-12-31 21:09:12

+0

只是試過了,但得到了這個錯誤'爲了重定向IO流,Process對象必須將UseShellExecute屬性設置爲false。「謝謝。 – 2011-12-31 21:11:45

+4

這就是降壓停止的地方,你不能兩面都有。 UAC可以防止高架橋樑的高架起降能力。您可以重新定向的唯一方法是首先提升自己。 – 2011-12-31 23:24:33

回答

13

您需要設置UseShellExecutetrueVerb得到尊重,並且必須設置爲「假」來重定向標準輸出。你不能這樣做。

我敢肯定,Windows也不允許你跨管理/非管理安全邊界重定向標準輸入/輸出/錯誤。你必須找到一種不同的方式來獲得以管理員身份運行的程序的輸出。

我沒看過這篇文章,但是這可能給你更多的信息:http://www.codeproject.com/KB/vista-security/UAC__The_Definitive_Guide.aspx

+0

我嘗試使用UseShellExecute = false; Verb =「runas」; RedirectStandardInput = true; Domain = du [0]; UserName = UserAdministrator; Password = SecureStringHelper.ToSecureString(pwd); LoadUserProfile = true; 並在清單中使用requestedExecutionLevel。 如果我使用UseShellExecute = true;我得到錯誤Process對象必須將UseShellExecute屬性設置爲false才能以用戶身份啓動進程。 – Kiquenet 2014-08-22 11:10:12

+0

完整示例以不同的方式獲取以管理員身份運行的程序的輸出? – Kiquenet 2014-08-28 06:31:03

2

您是否嘗試將管理憑據分配給ProcessStartInfo對象?

SecureString password = new SecureString(); 
password.AppendChar('p'); 
password.AppendChar('w'); 
cmd.UserName = "admin"; 
cmd.Password = password; 
+0

我不能這樣做,因爲我需要UAC來提示他們,因爲它會在多臺PC上使用,謝謝。 – 2011-12-31 21:21:55

+0

好的,有道理。你能告訴我爲什麼你要創建一個命令進程並指示它執行「sc」而不是直接運行「sc」命令? – Abbas 2011-12-31 21:27:16

+0

我想通過一個winform上的按鈕來運行sc命令,因爲用戶不知道如何使用sc,只是爲了讓他們輕鬆使用該程序。 – 2012-01-01 11:35:42