您的位置:首页 > 其它

FileRegistrationHelper 为文件类型注册默认打开方式

2017-06-06 15:41 519 查看
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,修改该文件:

<requestedExecutionLevel level="asInvoker" uiAccess="false" />


修改后:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />


保存后回到项目属性》安全性》启用clickonce安全性设定,取消勾选。

事实上注册默认打开方式通常由安装程序执行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: