2013-05-25 50 views
0

我做了一個WPF應用程序,它讀取/寫入其他進程的內存,大量使用註冊表項,讀取/寫入磁盤上的文件以及從網站下載/部署文件。 LOL不,它不是一個木馬,也不用擔心:d關於管理權限的疑問

現已框架4.5下編譯因此它通常是隻與Windows Vista或更高版本,並能正常工作,它需要管理員權限兼容。現在......爲了以透明的方式授予它所需的所有權限,我發現了各種各樣的可能性。我覺得簡單的是:

1)插入清單中的以下代碼:

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

2)檢查是否啓用UAC,如果採用了沒有管理員權限,如果是像這樣,詢問用戶他是否想授予應用程序的管理權限。然後,如果答案是「是」,運行使用升高的使用過程:

ProcessStartInfo.Verb = "runas"; 

所以...什麼是處理這個問題的最好方法是什麼?

我也有另一個問題。我的申請將啓動之後從字節數組加載程序集使用:

Byte[] assemblyData; 

using (BinaryReader reader = new BinaryReader(new FileStream(filePath, FileMode.Open))) 
    assemblyData = reader.ReadBytes(Convert.ToInt32(fs.Length)); 

Assembly assembly = Assembly.Load(assemblyData); 
MethodInfo method = assembly.EntryPoint; 

if (method != null) 
{ 
    Object instance = assembly.CreateInstance(method.Name); 
    method.Invoke(o, null); 
} 

我的問題是...將在大會正在從存儲器加載在上面的代碼段(另一WPF應用程序)具有的相同的特權加載它的應用程序?如果現在,我應該如何再次處理管理權限?

回答

1

如果應用程序需要的大部分操作的管理權限,使用

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

如果應用程序需要1-2操作是很少發生的,然後用AsInvoker權利啓動並提升您該應用程序的管理權限具體操作。

由於您正在閱讀的程序集已加載到進程內存中,因此它將具有與您的應用程序相同的特權。