2012-05-15 56 views
0

我有一個應用程序需要在每次部署新dll時在客戶端計算機上向gac註冊一個dll,問題是客戶端計算機只有UAC處於打開狀態的受限用戶。將dll註冊爲gac作爲另一個用戶

該應用程序知道具有管理權限的用戶的憑據。

的問題是,如果我有processStartInfo.UseShellExecute = false;那麼我不能讓線槽UAC收到錯誤「請求opperation需要提升」 ,如果我有processStartInfo.UseShellExecute = true;那麼它不允許運行整個事情作爲不同用戶:「過程對象必須UseShellExecute屬性,以啓動這一進程的用戶設置爲false」

 internal static void Register(String assemblyName) 
    { 
     ProcessStartInfo processStartInfo = new ProcessStartInfo(lcDir + "gacutil.exe", string.Format("/i {0}.dll", assemblyName)); 
     processStartInfo.UseShellExecute = false; 
     processStartInfo.WorkingDirectory = lcDir; 
     processStartInfo.UserName = lcUser; 
     processStartInfo.Password = Password; 
     processStartInfo.Domain = lcDomain; 

     processStartInfo.Verb = "runas"; 

     Process process = Process.Start(processStartInfo); 
     process.WaitForExit(); 
    } 

我想知道的「最佳實踐」爲那種事是什麼?我知道whoe概念看起來像病毒一樣的窗口。

我想什麼才達到以下幾點:

  • 用戶這麼想的需要知道具有管理員權限的帳戶
  • admin用戶的credencal的保存在程序的數據庫
  • 作爲儘可能多的自動註冊。
+0

好像看起來像有人投了我的問題沒有解釋。無論如何ty曼努埃爾Amstutz的輸入,但似乎工作,因爲如果我運行這樣的程序,我得到錯誤未知錯誤,如果我運行整個應用程序與管理員帳戶它的工作 – Jester

回答

0

你是不是意味着出於安全原因,一個應用程序中嵌入這樣的用戶字符串。

設計思路是使用系統管理服務或類似的工具進行部署來管理部署(很糟糕)。

我使用了私有程序集,它和unix的工作方式非常相似。

如果您希望在SQL Native Client中添加類支持,那麼您會發現每次部署都是艱難的。

如果您知道本地管理員名稱和密碼,則可以使用中央部署解決方案,而不是嘗試讓您的應用模擬管理員。

+0

以及安全方面的服務在某種程度上,因爲證書作爲加密字符串保存在sql數據庫中。而SQL服務器提供了一定程度的保護。無論如何,我的用例是不應該存在的東西我知道,但它完成了工作。 – Jester