2014-07-22 80 views
1

問題背景:C#進程 - 禁用用戶帳戶控制提示?

我打電話批處理文件通過使用Process對象的運行對MSTest.exe一個指定的DLL。

代碼:

我要保證在任何時候這個過程與提升的管理員權限運行。

我做這個目前由過程verb屬性設置爲runas,如圖所示:

try 
{ 
    _process.StartInfo.Verb = "runas"; 
    _process.StartInfo.CreateNoWindow = true; 
    _process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
    _process.StartInfo.Arguments = testLocation + " " + testDll; 
    _process.StartInfo.FileName = batchFileLocation; 
    _process.Start(); 
    _process.WaitForExit(); 
} 
catch (Exception ex) 
{ 
    throw ex; 
} 

問題:

這運行正常,但用戶帳戶控制(UAC)提示要求確認我希望進程運行.exe。

由於這個代碼是一個自動化的過程的一部分,我不能有任何人輸入點擊提示中的「是」按鈕,我怎麼能禁用UAC提示?

+0

如果UAC提示由需要從未升級的進程提升的進程激發,則無法繞過UAC提示。這是設計。 –

回答

0

您無法繞過UAC提示。

問問自己:如果你在Windows XP上這樣做,你會怎麼做?

想象一下,您在沒有UAC的操作系統上運行。那你會怎麼做?您不再具有UAC的便利性,而是始終以標準用戶身份運行。你的測試製度會做什麼?

  • crash?
  • 不合格?

如果您不喜歡UAC對話框,您可以關閉它。但是,你將處於一個不好的境地,因爲現在你就像在Windows XP上一樣:一個標準用戶,沒有簡單的方法擺脫它。

真正解決

真正的解決方法是修復你的DLL是做受保護。例如,如果這是一個COM DLL,並自注冊失敗,因爲你試圖寫入HKLM,那麼你需要

  • 授予自己完全控制到HKLM \ Software \ Classes下節點

如果您的DLL崩潰,因爲你試圖寫C:\ Program Files文件,則需要更改C:\Program Files的安全設置來給自己的訪問。

解決方案是解決失敗的問題。