改造下面方法 不用管理员

public static void CreateRegedit(string strkey, string value)
{
try
{
Assembly assembly = Assembly.GetExecutingAssembly();
string assemblyName = assembly.GetName().Name;
RegistryKey RegKey = Registry.ClassesRoot;
RegistryKey regkey = RegKey.OpenSubKey(strkey, true);
if (regkey == null)
regkey = RegKey.CreateSubKey(strkey);

regkey.SetValue(“”, “URL openOffice Handler”);
regkey.SetValue(“URL Protocol”, assemblyName);

RegistryKey regkeyDefaultIcon = regkey.OpenSubKey(“DefaultIcon”, true);
if (regkeyDefaultIcon == null)
regkeyDefaultIcon = regkey.CreateSubKey(“DefaultIcon”);
regkeyDefaultIcon.SetValue(“”, Application.StartupPath + “\\”+ assemblyName + “.exe”);

RegistryKey regkeyShell = regkey.OpenSubKey(“shell”, true);
if (regkeyShell == null)
regkeyShell = regkey.CreateSubKey(“shell”);
RegistryKey regkeyopen = regkeyShell.OpenSubKey(“open”, true);
if (regkeyopen == null)
regkeyopen = regkeyShell.CreateSubKey(“open”);

RegistryKey regkeycommand = regkeyopen.OpenSubKey(“command”, true);
if (regkeycommand == null)
regkeycommand = regkeyopen.CreateSubKey(“command”);
regkeycommand.SetValue(“”, Application.StartupPath + “\\”+ assemblyName + “.exe %1”);
RegKey.Close();

RegistryKey RegUserKey = Registry.CurrentUser;
RegistryKey regUserkey = RegUserKey.OpenSubKey(strkey, true);
if (regUserkey == null)
regUserkey = RegUserKey.CreateSubKey(strkey);
RegistryKey reguserkeyDefaultIcon = regUserkey.OpenSubKey(“DefaultIcon”, true);
if (reguserkeyDefaultIcon == null)
reguserkeyDefaultIcon = regUserkey.CreateSubKey(“DefaultIcon”);
reguserkeyDefaultIcon.SetValue(“”, Application.StartupPath + “\\”+ assemblyName + “.exe”);
RegUserKey.Close();
}
catch (Exception ex)
{
LogManager.WriteError(“CreateRegedit”, ex.StackTrace);
}
}

改造这个方法,使其不需要管理员权限。关键是 不要操作 Registry.ClassesRoot(HKCR 系统级),而只操作 当前用户的 HKCU\SOFTWARE\Classes,这样普通用户就能注册自定义 URL Protocol。

using Microsoft.Win32;
using System;
using System.Reflection;
using System.Windows.Forms;

public static class RegistryHelper
{
public static void CreateUserUrlProtocol(string strKey, string description)
{
try
{
Assembly assembly = Assembly.GetExecutingAssembly();
string assemblyName = assembly.GetName().Name;

// 只操作当前用户注册表 HKCU\SOFTWARE\Classes
RegistryKey regUserRoot = Registry.CurrentUser.OpenSubKey(“Software\\Classes”, true);
if (regUserRoot == null)
regUserRoot = Registry.CurrentUser.CreateSubKey(“Software\\Classes”);

RegistryKey regKey = regUserRoot.OpenSubKey(strKey, true);
if (regKey == null)
regKey = regUserRoot.CreateSubKey(strKey);

// 基本信息
regKey.SetValue(“”, description); // 名称描述
regKey.SetValue(“URL Protocol”, “”); // 声明为 URL Protocol

// DefaultIcon
RegistryKey regDefaultIcon = regKey.OpenSubKey(“DefaultIcon”, true);
if (regDefaultIcon == null)
regDefaultIcon = regKey.CreateSubKey(“DefaultIcon”);
regDefaultIcon.SetValue(“”, Application.StartupPath + “\\” + assemblyName + “.exe”);

// shell\open\command
RegistryKey regShell = regKey.OpenSubKey(“shell”, true);
if (regShell == null)
regShell = regKey.CreateSubKey(“shell”);

RegistryKey regOpen = regShell.OpenSubKey(“open”, true);
if (regOpen == null)
regOpen = regShell.CreateSubKey(“open”);

RegistryKey regCommand = regOpen.OpenSubKey(“command”, true);
if (regCommand == null)
regCommand = regOpen.CreateSubKey(“command”);

regCommand.SetValue(“”, “\”” + Application.StartupPath + “\\” + assemblyName + “.exe\” \”%1\””);

regUserRoot.Close();
}
catch (Exception ex)
{
// 捕获异常,可记录日志
MessageBox.Show(“注册 URL Protocol 失败:” + ex.Message);
}
}
}

欢迎使用66资源网
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
7. 本站有不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别!

66源码网 » java winform程序写入注册表

提供最优质的资源集合

立即查看 了解详情