我正在尝试添加经典的"使用MyApp发送";在ContextMenu中。
事实上,我的程序修改了windows注册表,但似乎看不到它的更新版本。事实上,如果我重新启动我的程序,留下它修改的密钥,它会正常工作。
我如何解决这个问题(而不创建另一个程序来修改windows注册表,然后调用我的(?
提前感谢您的帮助。
p.s。以下是我用来修改注册表的功能
private void AddOption_ContextMenu()
{
RegistryKey _key1 = Registry.ClassesRoot.OpenSubKey("Folder\shell", true);
RegistryKey _key = Registry.ClassesRoot.OpenSubKey("*\shell", true);
RegistryKey newkey = _key.CreateSubKey("MyApp");
RegistryKey newkey1 = _key1.CreateSubKey("MyApp");
RegistryKey command = newkey.CreateSubKey("command");
RegistryKey command1 = newkey1.CreateSubKey("command");
string program = Path.GetDirectoryName(Application.ResourceAssembly.Location);
for (int i = 0; i < 3; i++)
program = Path.GetDirectoryName(program);
program = @"""" + program + @"\MyApp\bin\Debug\MyApp.exe"" ""%1""";
command.SetValue("", program);
command1.SetValue("", program);
newkey.SetValue("", "Send with MyApp");
newkey.SetValue("Icon", Path.GetDirectoryName(Application.ResourceAssembly.Location) + "\icon.ico");
newkey1.SetValue("", "Send with MyApp");
newkey1.SetValue("Icon", Path.GetDirectoryName(Application.ResourceAssembly.Location) + "\icon.ico");
command.Close();
command1.Close();
newkey1.Close();
newkey.Close();
_key.Close();
}
public void RemoveOption_ContextMenu()
{
RegistryKey _key = Registry.ClassesRoot.OpenSubKey("*\shell", true);
RegistryKey _key1 = Registry.ClassesRoot.OpenSubKey("Folder\shell", true);
_key.DeleteSubKeyTree("MyApp");
_key1.DeleteSubKeyTree("MyApp");
_key1.Close();
_key.Close();
}
你读过这个吗?用C#编辑了注册表,但用regedit 找不到更改
我几年前就发现了这个问题,我认为必须使用(至少(两个不同的C#线程来查看注册表项的更改-->
参考:C#:如何更改windows注册表并立即生效