Laden...

[gelöst] Registry - Kontextmenü-Erweiterung von .sdf-Dateien

Erstellt von Gepro vor 12 Jahren Letzter Beitrag vor 12 Jahren 2.037 Views
G
Gepro Themenstarter:in
419 Beiträge seit 2007
vor 12 Jahren
[gelöst] Registry - Kontextmenü-Erweiterung von .sdf-Dateien

Hi,
ich möchte gerne das Kontextmenü erweitern, wenn ich auf eine .sdf-Datenbankdatei rechts klicke.

Ich habe aktuell folgenden Quellcode


        public static void Create()
        {
            string keyName = ".sdf";
            string contextName = "Das ist ein SDF Test";
            string exe = @"C:\Users\........exe";

            bool isWritable = true;

            try
            {
                RegistryKey classesRoot = Registry.ClassesRoot;
                RegistryKey parentKey = classesRoot.OpenSubKey(keyName, isWritable);

                parentKey.CreateSubKey("shell");

                RegistryKey shell = parentKey.OpenSubKey("shell", isWritable);
                RegistryKey context = shell.CreateSubKey(contextName);
                RegistryKey command = context.CreateSubKey("command");
                command.SetValue("", exe);
                classesRoot.Flush();
                classesRoot.Close();
            }
            catch (Exception)
            {
                throw;
            }
        }

Wenn ich jetzt das Kontextmenü aufrufe sehe ich nichts. Was mache ich falsch ?

C
1.214 Beiträge seit 2006
vor 12 Jahren

Der shell Knoten kommt nicht unterhalb des Knotens mit der Erweiterung, sondern unterhalb des Knotens, auf den er in seinem default Eintrag verweist. z.B.:

.bmp -> IrfanView.Bmp

IrfanView.Bmp
shell
open
command

G
Gepro Themenstarter:in
419 Beiträge seit 2007
vor 12 Jahren

sondern unterhalb des Knotens, auf den er in seinem default Eintrag verweist...

Wie "verweise ich einen default Eintrag" ? Das versteh ich nicht.
Also ich mach den shell-Schlüssel z.B. unter den neuen Schlüssel Test.sdf und dann ?

C
1.214 Beiträge seit 2006
vor 12 Jahren

Das ist das, was du in Regedit als "Standard" oder eben default siehst. Den Wert kriegst du raus, wenn du bei GetValue "" oder null übergibst. Also, erst den Wert auslesen. Also, sowas in etwa:


RegistryKey classesRoot = Registry.ClassesRoot;
RegistryKey parentKey = classesRoot.OpenSubKey(keyName);
string realKeyName = parentKey.GetValue("");
RegistryKey realParentKey = classesRoot.OpenSubKey(realKEyName);

Und dann machst du mit realParentKey weiter wie bisher.

G
Gepro Themenstarter:in
419 Beiträge seit 2007
vor 12 Jahren

Jetzt verstehe ich.
Ich muss den Key "SQL Server Compact Edition Database File" nehmen, der als Wert bei standard unter dem Schlüssel .sdf angegeben ist.
Jetzt klappts, danke!