FileRegistrationHelper转自【http://www.cnblogs.com/hdl217/archive/2010/11/09/1872983.html】
public class FileRegistrationHelper { public static void SetFileAssociation(string extension, string progID) { // Create extension subkey SetValue(Registry.ClassesRoot, extension, progID); // Create progid subkey string assemblyFullPath = System.Reflection.Assembly.GetExecutingAssembly().Location.Replace("/", @"\"); StringBuilder sbShellEntry = new StringBuilder(); sbShellEntry.AppendFormat("\"{0}\" \"%1\"", assemblyFullPath); SetValue(Registry.ClassesRoot, progID + @"\shell\open\command", sbShellEntry.ToString()); StringBuilder sbDefaultIconEntry = new StringBuilder(); sbDefaultIconEntry.AppendFormat("\"{0}\",0", assemblyFullPath); SetValue(Registry.ClassesRoot, progID + @"\DefaultIcon", sbDefaultIconEntry.ToString()); // Create application subkey SetValue(Registry.ClassesRoot, @"Applications\" + Path.GetFileName(assemblyFullPath), "", "NoOpenWith"); } private static void SetValue(RegistryKey root, string subKey, object keyValue) { SetValue(root, subKey, keyValue, null); } private static void SetValue(RegistryKey root, string subKey, object keyValue, string valueName) { bool hasSubKey = ((subKey != null) && (subKey.Length > 0)); RegistryKey key = root; try { if (hasSubKey) key = root.CreateSubKey(subKey); key.SetValue(valueName, keyValue); } finally { if (hasSubKey && (key != null)) key.Close(); } } }
使用方式:
在app启动时调用方法 public void SetFileAssociation() { string extension = ".test"; string title = "something here"; string extensionDescription = "some description"; FileRegistrationHelper.SetFileAssociation( extension, title + "." + extensionDescription); }
补充:程序需要管理员权限,方法:
勾选项目属性》安全性》启用clickonce安全性设定,勾选后项目目录Properties下会看见新文件app.manifest,修改该文件:
修改后:
保存后回到项目属性》安全性》启用clickonce安全性设定,取消勾选。
事实上注册默认打开方式通常由安装程序执行。