我的应用场景是windows服务挂载了我的程序之后,按启动,它就修改注册表...
但是,原本就是一件很简单的事情,貌似出现了不可思议的事情....
我的权限已经是系统级别的,因为是服务程序嘛~
我在修改注册表上面cad的.vlx后缀名时,想在"默认"的添加"关联的程序",结果死都添加不上.....
最后手动删除一次,就可以了.....
所以用代码的时候主要不要在服务程序上面调用了噢!
代码在这里:

/// <summary> /// 使文件类型与对应的图标及应用程序关联起来 /// </summary> public void RegisterFileType() { var sb = new StringBuilder(); sb.Append(this.ExtendName.Substring(1, this.ExtendName.Length - 1)); sb.Append(ProjectName); var relationName = sb.ToString(); //在windows服务中,如果你不手工删除一次{/计算机HKEY_CLASSES_ROOT.vlx}注册表, //那么以下代码将会有很奇怪的表现, //你通过这里的代码无法删除.vlx注册表项. //你添加在SetValue("",relationName)默认项的在程序结束后也不会呈现,但立即GetValue("")却可以获取值.. //手工删除一次,即可解决所有的问题.. //计算机HKEY_CLASSES_ROOT.vlx 上面写引用的注册程序vlxProject var fileTypeKey = Registry.ClassesRoot.CreateSubKey(this.ExtendName); fileTypeKey.SetValue("", relationName);//默认位置就是"" fileTypeKey.SetValue("JService", relationName);//为了保证不手工删除,依然能处理... //fileTypeKey.GetValue("").ToString(); fileTypeKey.Close(); //计算机HKEY_CLASSES_ROOTvlxProject 注册了一个打开程序,这个程序内写打开的信息 RegistryKey relationKey = Registry.ClassesRoot.CreateSubKey(relationName); relationKey.SetValue("", this.Description); RegistryKey iconKey = relationKey.CreateSubKey("DefaultIcon"); iconKey.SetValue("", this.IconPath.Replace("\", "/")); RegistryKey shellKey = relationKey.CreateSubKey("Shell"); RegistryKey openKey = shellKey.CreateSubKey("Open"); RegistryKey commandKey = openKey.CreateSubKey("Command"); commandKey.SetValue("", $""{this.ProjectPath}" "%1""); // " %1"表示将被双击的文件的路径传给目标应用程序 relationKey.Close(); }
(完)