2013-05-25 5 views
0

J'ai créé une application WPF qui lit/écrit la mémoire des autres processus, utilise beaucoup les clés de registre, lit/écrit les fichiers sur le disque et télécharge/déploie les fichiers d'un site Web. LOL non, ce n'est pas un cheval de Troie, ne vous inquiétez pas: DDoutes sur les privilèges d'administrateur

Il a été compilé sous Framework 4.5 donc il sera normalement compatible uniquement avec Windows Vista ou versions ultérieures, et, pour fonctionner correctement, il aura besoin de droits d'administrateur . Maintenant ... afin de lui accorder toutes les permissions dont il a besoin d'une manière transparente, j'ai trouvé un large éventail de possibilités. Ceux que je trouve plus simple sont:

1) Insérer le code suivant dans le manifeste:

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

2) Vérifier si l'UAC est activé et si l'on utilise n'a pas de droits d'administrateur, si elle est comme si , demandant à l'utilisateur s'il veut accorder des droits d'administrateur à l'application. Ensuite, si la réponse est « oui », l'exécution d'un processus de demande élevée en utilisant:

ProcessStartInfo.Verb = "runas"; 

Alors ... quelle est la meilleure façon de gérer ce problème?

J'ai aussi une autre question. Mon application va charger une assemblée à partir d'un tableau d'octets après le démarrage en utilisant:

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); 
} 

Ma question est ... sera l'Assemblée étant chargée de la mémoire dans l'extrait de code ci-dessus (une autre application WPF) ont les mêmes privilèges de la application qui l'a chargé? Si maintenant, comment devrais-je traiter à nouveau des droits d'administration?

Répondre

1

Si votre application a besoin de droits d'administrateur pour la plupart de son fonctionnement, utilisez

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

Si votre application a besoin de droits d'administrateur pour 1-2 opérations qui se produisent rarement, puis lancer des droits asInvoker et élever votre demande que opération spécifique. Comme l'assemblage que vous lisez est chargé dans votre mémoire de processus, il aura les mêmes privilèges que votre application.