Question

Je vous écris un petit utilitaire de WPF pour gérer les entrées dans le fichier hosts à des fins de dev. Comme vous le savez peut-être le fichier hosts est protégé par le plus récent des systèmes d'exploitation (Windows 7/2008 / Vista).

J'ai ajouté un manifeste à ma demande pour régler le requestedExecutionLevel à « requireAdministrator », comme détaillé ici (en utilisant "la voie facile") et la question connexe ici .

Malheureusement, cela n'a pas fonctionné pour moi. Il n'y a pas d'élévation rapide quand je commence l'application, et d'appeler File.AppendText pour les hôtes fichier entraîne encore un System.UnauthorizedAccessException être jeté: « L'accès au chemin « C: \ Windows \ System32 \ drivers \ etc \ hosts » est niée. "

HostsChanger.exe.manifest:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="HostsChanger" type="win32"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
        <requestedPrivileges>
            <requestedExecutionLevel level="requireAdministrator"/>
        </requestedPrivileges>
    </security>
</trustInfo>
</assembly>

Toutes les idées?

Était-ce utile?

La solution

Paraphrase de mon commentaire précédent, transformé en une réponse:

Le HO1 de réponse a contient une app.manifest qui est exactement la même que l'application je travaille au travail, et l'élévation travaille pour elle. La différence ici est que le nom de fichier est « app.manifest », et l'option de projet « Manifest » (sous l'onglet d'application) pointe vers elle.

Autres conseils

Je ne sais pas si ça va faire une différence, mais votre extrait manifeste est légèrement différent de ma compréhension de la façon dont il devrait être (bien que peut-être différentes versions):

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <assemblyIdentity version="1.0.0.0" name="HostsChanger" />
   <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
      <security>
         <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
            <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
         </requestedPrivileges>
      </security>
   </trustInfo>
</asmv1:assembly>

Dans le cas contraire, un travail peut-être autour d'avoir un séparé « Loader » app que le démarrage de l'utilisateur avec et que commence seulement votre outil de WPF réel en utilisant le Verb de runas comme indiqué dans ce blog (si Process.StartInfo.Verb = "runas";).

Je vais prendre un coup de poignard dans le noir ici et dire qu'il est une question de signature Authenticode. Je ne l'ai pas entendu dire que vous avez rien dit au sujet de la signature de votre demande. En ce qui concerne ma compréhension va, contrairement à Vista, dans Windows 2008/7 la seule façon d'exécuter une application élevée est d'avoir un manifeste d'application signée qui identifie le niveau de privilège que les besoins de l'application. Si vous avez besoin signature d'aide, voici un article sur la façon de signer votre application: http: //msdn.microsoft.com/en-us/library/bb756995.aspx

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top