码迷,mamicode.com
首页 > Windows程序 > 详细

c# 在windows服务程序修改注册表的文件拓展名(后缀名)时,出现无法删除无法修改.

时间:2020-11-06 01:26:59      阅读:36      评论:0      收藏:0      [点我收藏+]

标签:默认   bst   启动   sed   文件的   end   splay   计算   oid   

我的应用场景是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_ROOT\vlxProject 注册了一个打开程序,这个程序内写打开的信息
            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();  
        }
View Code

 

我的系统版本是最新的win10...

技术图片

c# 在windows服务程序修改注册表的文件拓展名(后缀名)时,出现无法删除无法修改.

标签:默认   bst   启动   sed   文件的   end   splay   计算   oid   

原文地址:https://www.cnblogs.com/JJBox/p/13929515.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!