如何在注册表中更改文件类型关联?

Ser*_*pia 12 .net c# registry file-extension

第一次在StackOverflow中发帖.:D我需要我的软件在注册表中添加一些东西.

我的程序将使用

Process.Start(@"blblabla.smc");

启动文件,但问题是用户很可能没有将程序设置为特定文件扩展名的默认应用程序.

如何将文件关联添加到WindowsRegistry?

ars*_*ars 28

除了已经提供的答案之外,您还可以通过调用命令行程序"ASSOC"和"FTYPE"来完成此操作.FTYPE将文件类型与程序相关联.ASSOC将文件扩展名与通过FTYPE指定的文件类型相关联.例如:

FTYPE SMCFile="C:\some_path\SMCProgram.exe" -some_option %1 %*
ASSOC .smc=SMCFile
Run Code Online (Sandbox Code Playgroud)

这将在注册表中进行必要的输入.有关更多信息,请在命令提示符下键入ASSOC /?FTYPE /?.


jas*_*son 8

使用Registry课程Microsoft.Win32.

具体来说,您需要访问密钥的ClassesRoot属性(参见了解MS Windows文件关联HKEY_CLASSES_ROOT:核心服务).RegistryHKEY_CLASSES_ROOT

using Microsoft.Win32;
Registry
    .ClassesRoot
    .CreateSubKey(".smc")
    .SetValue("", "SMC", RegistryValueKind.String);
Registry
    .ClassesRoot
    .CreateSubKey("SMC\shell\open\command")
    .SetValue("", "SMCProcessor \"%1\"", RegistryValueKind.String);
Run Code Online (Sandbox Code Playgroud)

替换"SMCProcessor \"%1\""为您希望与具有扩展名的文件关联的程序的命令行路径和参数规范.smc.

但是,为什么不说,而不是搞乱注册表

Process.Start("SMCProcessor blblabla.smc");
Run Code Online (Sandbox Code Playgroud)