读书人

注册表中的一个文件类型如何删除

发布时间: 2013-12-13 13:57:17 作者: rapoo

注册表中的一个文件类型怎么删除
问题是这样的,我用DeleteSubKeyTree()可一直都删不掉(比如.MP3),都不知道为什么。
很纠结。
系统:Windows8.1
该注册表项定义是这样的


Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mp3]

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mp3\UserChoice]
"Hash"="ZrsPmXRsjQc="
"ProgId"="Audio.MP3"




而我写的代码

RegistryKey regKey= Registry.CurrentUser;
string SubKeyPath = @"Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts";
RegistryKey optionKey = regKey.OpenSubKey(SubKeyPath, true);
string[] subKeys = optionKey.GetSubKeyNames();
foreach (string akey in subKeys)
{
if (akey.ToUpper() == ".MP3")
{
RegistryKey _VRPkey = optionKey.OpenSubKey(akey,true);
if(_VRPkey!=null)
optionKey.DeleteSubKeyTree(akey);
//optionKey.Close();
return true;
}
}



高手能支招这是错在哪了?
如果说用来关联文件的话,有什么好的支招么。
仅仅在Registry.ClassesRoot设置好像不给力啊,注册表是改了,但关联还是错误的。
可能是我曾经对这类型的文件右键 更改 过打开方式的缘故?
Win81很纠结
请求大神
[解决办法]
http://blog.sina.com.cn/s/blog_6532295a0100q8hk.html
[解决办法]
这是一个开机启动的例子,可以参考这个来实现
public static bool AutoRun(bool param)
{
string strName = Application.ExecutablePath;
string strNewName = strName.Substring(strName.LastIndexOf("\\") + 1, strName.LastIndexOf(".") - strName.LastIndexOf("\\") - 1);
//指定文件是否存在
if (!System.IO.File.Exists(strName))
return false;
Microsoft.Win32.RegistryKey rkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
if (rkey == null)
rkey = Microsoft.Win32.Registry.LocalMachine.CreateSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");
//修改注册表
try
{
if (param == true)
rkey.SetValue(strNewName, strName);//设置开机启动
else
rkey.DeleteValue(strNewName);//取消开机启动
return true;
}
catch
{
}
return false;
}
[解决办法]
文件关联需要设置如下注册表项 HKCR是HKEY_CLASSES_ROOT
WriteRegStr HKCR ".pjt" "" "pjtfile"
WriteRegStr HKCR "pjtfile" "" "经济评价工程文件" //文件描述
WriteRegStr HKCR "pjtfile\DefaultIcon" "" "$INSTDIR\main.ico,0" //图标
WriteRegStr HKCR "pjtfile\shell\open\command" "" "$INSTDIR\${PRODUCT_EXE} %1" //双击执行exe,并传入命令行参数


写注册表完毕后,需要调用api函数,通知系统刷新显示
SHChangeNotify
[解决办法]
不太了解,期待高手
[解决办法]


是这样的。Win8 USER项下的子项权限保护得很好的,一般都不允许应用程序操作,这得要经过用户自己的确认。不然谷歌浏览器就不会专门为Win8的系统设置一个程序关联类的工具,用户首次运行时都会弹出一个询问关联的对话框目的就是让用户来手动设置,原因就是这样。这是Win8的一个特点。

读书人网 >C#

热点推荐