2012-01-11 474 views
5

我在WPF應用程序(自託管)中有WCF服務,而且我的典型錯誤是「您的進程無權訪問此名稱空間」。 用戶不能擁有管理員權限,因此使用.manifest不是解決方案。 這些端口是動態的,應用程序每次運行時都會計算一個空閒端口,所以應用程序必須通過netsh多次插入監聽端口 我使用帶域管理員的ProcessStartInfo,但要啓動進程,用戶需要管理員權限。 以管理員身份運行應用程序既不是解決方案,所以我需要一個普通用戶可以運行該應用程序,並且該程序通過netsh作爲域管理員添加端口。在WCF中將netsh添加爲沒有管理員權限的域管理員

我的過程是這樣的:

ProcessStartInfo psi = new ProcessStartInfo("netsh", parameter); 
     SecureString ss = new SecureString(); 

      for (int i = 0; i < adminPass.Length; i++) 
       ss.AppendChar(adminPass[i]); 

      psi.Password = ss; 
      psi.UserName = Admin; 
      psi.Domain = Domain; 
      psi.Verb = "runas"; 
      psi.RedirectStandardOutput = false; 
      psi.CreateNoWindow = true; 
      psi.WindowStyle = ProcessWindowStyle.Hidden; 
      psi.UseShellExecute = false; 
      Process.Start(psi); 

非常感謝

回答

1

看看這個Stack Overflow question接受的答案爲可能的解決您的問題。答案中概述的方法是將管理員需要的代碼分解到Windows服務中,該服務在調用時在適當的(獨立的)帳戶下執行提升的權限操作。