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