2013-05-25 6 views
0

Я сделал приложение WPF, которое считывает/записывает память других процессов, широко использует ключи реестра, читает/записывает файлы на диск и загружает/разворачивает файлы с веб-сайта. LOL no, это не троян, не волнуйтесь: DСомнения в отношении привилегий администратора

Он был скомпилирован под Framework 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 и поднять свое приложение для этого конкретной операции.

Поскольку сборка, которую вы читаете, загружается в память процесса, она будет иметь ту же привилегию, что и ваше приложение.

Смежные вопросы