Frage

Ich schreibe ein wenig WPF Dienstprogramm Einträge in der Hosts-Datei für dev Zwecke zu verwalten. Wie Sie die Hosts-Datei konnten einfach durch die neueren Betriebssysteme (Win 7/2008 / Vista) geschützt ist.

Ich habe ein Manifest zu meiner Anwendung hinzugefügt, um die requestedExecutionLevel auf "requireAdministrator" zu setzen, wie detailliert hier und in der damit verbundenen Frage hier .

Leider hat dies für mich nicht funktioniert. Es gibt keine Anhebungsaufforderung, wenn ich die App starten, und für die Gastgeber File.AppendText Aufruf verursacht Datei noch eine System.UnauthorizedAccessException geworfen werden: „Zugriff auf den Pfad‚C: \ Windows \ System32 \ drivers \ etc \ hosts‘ist verweigert. "

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>

Irgendwelche Ideen?

War es hilfreich?

Lösung

Umschrieben von meinem früheren Kommentar, in eine Antwort eingeschaltet:

Die Antwort ho1 gab enthält eine app.manifest, die genau die gleiche wie die App ist ich auf bei der Arbeit zu arbeiten, und Erhebung arbeitet für sie. Der Unterschied besteht darin, dass der Dateiname „app.manifest“ und die Projektoption „Manifest“ (auf der Registerkarte Anwendung) wird auf sie zeigen.

Andere Tipps

Ich bin mir nicht sicher, ob es einen Unterschied machen, wird aber Manifest-Schnipsel ist etwas anders aus meinem Verständnis davon, wie es sein soll (obwohl die verschiedenen Versionen sein könnte):

<?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>

Ansonsten eine Arbeit um möglicherweise einen separaten „Loader“ App haben sein, dass der Benutzer beginnt mit und startet nur Ihr echtes WPF-Tool mit der Verb runas wie detailliert in diese Blog-Post (so Process.StartInfo.Verb = "runas";).

Ich werde einen Stich in der Dunkelheit nehmen hier und sagen, dass es eine Authenticode-Signatur Problem. Ich habe nicht gehört, dass Sie etwas vergessen über Ihre Anmeldung erkennen. Soweit mein Verständnis geht, im Gegensatz zu Vista, Windows 2008/7 die einzige Möglichkeit, eine Anwendung auszuführen, erhöht ist, eine signierte Anwendung manifestieren zu haben, dass die Berechtigungsebene identifiziert, dass die Anwendung benötigt. Wenn Sie Hilfe bei der Anmeldung benötigen, ist hier ein Artikel auf, wie Ihre Anwendung zu unterschreiben: http: //msdn.microsoft.com/en-us/library/bb756995.aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top