2017-10-12 8 views
0

Ich würde einen neuen Eintrag "Share" im Kontextmenü hinzufügen, also mit der rechten Maustaste auf eine Datei würde ich diesen neuen Eintrag "Share" im Kontextmenü sehen. Ich habe versucht, wie in dem folgenden Code, aber Methode CreateSubKey() wirft System.UnauthorizedAccessException ten Ausnahme Schlüssel HKEY_CLASSES_ROOT Zugriff verweigert sagenWie programmgesteuert Zugriff erhalten, um einen neuen Eintrag im Kontextmenü hinzuzufügen?

const string MenuName = "*\\shell\\NewMenuOption"; 
const string Command = "*\\shell\\NewMenuOption\\command"; 
RegistryKey key = null; 
key = Registry.ClassesRoot.CreateSubKey(MenuName, RegistryKeyPermissionCheck.ReadWriteSubTree); 
key = Registry.ClassesRoot.CreateSubKey(Command, RegistryKeyPermissionCheck.ReadWriteSubTree); 
key.SetValue("Share", ObjectToStore); 

ich auf diesen guide etwas sah, aber ich denke, dass auf .NET2.0 war es anders

+0

Ich löste das Probem, das eine getrennte Exe mit Administratorrechten ausführt, die den Schlüssel setzten. Auf diese Weise wird die Anfrage von rechts nur einmal @Michael –

Antwort

1

Ich denke, dass Sie (lokale?) Administratorberechtigungen dafür benötigen. Versuche, deine App als Administrator auszuführen.
Wenn dies funktioniert haben Sie zwei Möglichkeiten:

Methode sind Administratorrechte benötigen, um Ihre Anwendung auszuführen - nicht die beste Idee.
Methode zwei wäre ein zweites (Befehlszeilen-) Projekt, das nur einen Zweck hat, diese Registrierungsschlüssel zu erstellen. Diese App benötigt Administratorrechte. Und Sie können diese Anwendung (Process.Start(...)) von Ihrer Hauptanwendung ausführen.

dem Server-Betreiber-Zugriffsrechte in Ihrer Anwendung hinzufügen eine app.manifest/Manifest-Datei auf Ihrem Visual Studio-Projekt und Kommentar- diese Linie <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

Das Loch-Datei wie folgt aussehen sollte sein zwingen (es gibt mehr Standardeinträge in der App manifest Visual Studio generiert für Sie)

<?xml version="1.0" encoding="utf-8"?> 
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
    <security> 
     <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> 
     <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
     <!-- <requestedExecutionLevel level="highestAvailable" uiAccess="false" /> --> 
     </requestedPrivileges> 
    </security> 
    </trustInfo> 
</assembly> 

gehen dann Einstellungen zu projizieren, Anwendung und im unteren Bildschirm unter manifestieren Sie Ihre app.manifest Datei wählen. Neu erstellen. Erledigt.

+0

Wo möglich, sollte das Erstellen von Anwendungen, die erhöhte Rechte erfordern, vermieden werden. In diesem Fall wäre das Hinzufügen zu HK_USERS wahrscheinlich geeigneter. – DiskJunky

+1

@DiskJunky Sie haben Recht. Ich habe meinen Beitrag aktualisiert :) – Michael

+0

@FedericoRizzo Einige weitere Details wären nett ... Was haben Sie versucht und was passiert? – Michael

0

Wenn Sie HK_CLASSES_ROOT hinzufügen, muss Ihre Anwendung mit erhöhten Rechten ausgeführt werden. Sie sollten im Idealfall alle Änderungen an HK_USERS behalten, die die gleichen Unterschlüssel haben sollten

+0

Vielen Dank. Es funktioniert –

+0

Bitte einen Moment. Bist du sicher, dass ich mit HK_USER das Kontextmenü bearbeiten kann? @DiskJunky –

+0

Dieser Beitrag hat eine detailliertere Anleitung; https://StackOverflow.com/a/2124396/1838819 – DiskJunky

Verwandte Themen