测试篇 c#文件类型关联启动程序

我的应用场景是windows服务挂载了我的程序之后,按启动,它就修改注册表.
img

但是,原本就是一件很简单的事情,貌似出现了不可思议的事情.
我的权限已经是系统级别的,因为是服务程序嘛~
我在修改注册表上面cad的.vlx后缀名时,
想在"默认"的添加"关联的程序",结果死都添加不上.
最后手动删除一次,就可以了..

img

img

所以用代码的时候主要不要在服务程序上面调用了噢!

代码在这里:

/// <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
    using var fileTypeKey = Registry.ClassesRoot.CreateSubKey(this.ExtendName);

    fileTypeKey.SetValue("", relationName);//默认位置就是""
    fileTypeKey.SetValue("JService", relationName);

    //计算机\HKEY_CLASSES_ROOT\vlxProject 注册了一个打开程序,这个程序内写打开的信息
    using RegistryKey relationKey = Registry.ClassesRoot.CreateSubKey(relationName);
    relationKey.SetValue("", this.Description);
    using RegistryKey iconKey = relationKey.CreateSubKey("DefaultIcon");
    iconKey.SetValue("", this.IconPath.Replace("\\", "/"));
    using RegistryKey shellKey = relationKey.CreateSubKey("Shell");
    using RegistryKey openKey = shellKey.CreateSubKey("Open");
    using RegistryKey commandKey = openKey.CreateSubKey("Command");
    commandKey.SetValue("", $"\"{this.ProjectPath}\" \"%1\""); // " %1"表示将被双击的文件的路径传给目标应用程序 
}

(完)

posted @ 2020-11-05 00:05  惊惊  阅读(447)  评论(0编辑  收藏  举报