using Microsoft.Win32; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using TeamAAS_VP; using TeamAAS_VP.Resources.Languages; namespace TeamAAS_VP.Core { /// /// 注册表操作 /// public class RegeditHelper { /// /// 读取注册表 /// /// 读取到的注册表中的值 /// 返回是否读取成功! public static bool ReadRegistryKey(out string value) { value = string.Empty; try { RegistryKey key = Registry.CurrentUser; //Registry.LocalMachine; if (IsRegeditItemExist()) //注册表存在(SOFTWARE\\TEAMScrew) { if (IsRegeditKeyExit()) //注册表中的键值存在(key) { //读取键值 string info = ""; RegistryKey software = key.OpenSubKey("SOFTWARE\\TEAMAAS"); info = software.GetValue("license").ToString(); value = info; software.Close(); key.Close(); return true; } else { key.Close(); return false; } } else { key.Close(); return false; } } catch (Exception ex) { LogHelper.WriteLogError(Lang.读取注册表时出错, ex); return false; } } /// /// 写入注册表 /// /// 要写入的信息 /// 返回是否写入成功 public static bool WriteRegistryKey(string value) { try { //创建注册表项 RegistryKey key = Registry.CurrentUser; //Registry.LocalMachine; RegistryKey software = key.CreateSubKey("SOFTWARE\\TEAMAAS"); //在HKEY_LOCAL_MACHINE\SOFTWARE下新建名为test的注册表项。如果已经存在则不影响! //打开注册表项 software = key.OpenSubKey("SOFTWARE\\TEAMAAS", true); //注意,如果该注册表项不存在,这调用这个方法会抛出异常 //注意该方法后面还可以有一个布尔型的参数,true表示可以写入。 //对键值的创建修改 software = key.OpenSubKey("SOFTWARE\\TEAMAAS", true); //该项必须已存在 software.SetValue("license", value); //在HKEY_LOCAL_MACHINE\SOFTWARE\TEAMScrew下创建一个名为“key”,值为“博客园”的键值。如果该键值原本已经存在,则会修改替换原来的键值,如果不存在则是创建该键值。 // 注意:SetValue()还有第三个参数,主要是用于设置键值的类型,如:字符串,二进制,Dword等等~~默认是字符串。如: // software.SetValue("test", "0", RegistryValueKind.DWord); //二进制信息 software.Close(); key.Close(); return true; } catch (Exception ex) { LogHelper.WriteLogError(Lang.注册表写入时出错, ex); return false; } } /// /// 判断注册表是否存在 /// /// public static bool IsRegeditItemExist() { string[] subkeyNames; RegistryKey hkml = Registry.CurrentUser; //Registry.LocalMachine; RegistryKey software = hkml.OpenSubKey("SOFTWARE"); //RegistryKey software = hkml.OpenSubKey("SOFTWARE", true); subkeyNames = software.GetSubKeyNames(); //取得该项下所有子项的名称的序列,并传递给预定的数组中 foreach (string keyName in subkeyNames) //遍历整个数组 { if (keyName == "TEAMAAS") //判断子项的名称 { hkml.Close(); return true; } } hkml.Close(); return false; } /// /// 判断键值是否存在 /// /// public static bool IsRegeditKeyExit() { string[] subkeyNames; RegistryKey hkml = Registry.CurrentUser; //Registry.LocalMachine; RegistryKey software = hkml.OpenSubKey("SOFTWARE\\TEAMAAS"); //RegistryKey software = hkml.OpenSubKey("SOFTWARE\\test", true); subkeyNames = software.GetValueNames(); //取得该项下所有键值的名称的序列,并传递给预定的数组中 foreach (string keyName in subkeyNames) { if (keyName == "license") //判断键值的名称 { hkml.Close(); return true; } } hkml.Close(); return false; } /// /// 是否时第一次在此PC上使用此软件 /// /// public static bool IsFirstUse() { try { if (IsRegeditItemExist()) //注册表存在(SOFTWARE\\TEAMScrew) { bool _isHaveKey = false; string[] subkeyNames; RegistryKey hkml = Registry.CurrentUser; //Registry.LocalMachine; RegistryKey software = hkml.OpenSubKey("SOFTWARE\\TEAMAAS"); if (software==null) { return false; } //RegistryKey software = hkml.OpenSubKey("SOFTWARE\\test", true); subkeyNames = software.GetValueNames(); //取得该项下所有键值的名称的序列,并传递给预定的数组中 foreach (string keyName in subkeyNames) { if (keyName == "Use") //判断键值的名称 { _isHaveKey = true; break; } } hkml.Close(); software.Close(); return _isHaveKey; } else { return false; } } catch (Exception ex) { LogHelper.WriteLogError(Lang.检测软件是否首次启动时出错,ex); return false; } } /// /// 写入注册表第一次使用软件的时间 /// public static void WriteFirstLog() { try { //创建注册表项 RegistryKey key = Registry.CurrentUser; //Registry.LocalMachine; RegistryKey software = key.CreateSubKey("SOFTWARE\\TEAMAAS"); //在HKEY_LOCAL_MACHINE\SOFTWARE下新建名为test的注册表项。如果已经存在则不影响! //打开注册表项 software = key.OpenSubKey("SOFTWARE\\TEAMAAS", true); //注意,如果该注册表项不存在,这调用这个方法会抛出异常 //注意该方法后面还可以有一个布尔型的参数,true表示可以写入。 //对键值的创建修改 software = key.OpenSubKey("SOFTWARE\\TEAMAAS", true); //该项必须已存在 software.SetValue("Use", DateTime.Now.ToString("yyyyMMddHHmmss")); //在HKEY_LOCAL_MACHINE\SOFTWARE\TEAMScrew下创建一个名为“key”,值为“博客园”的键值。如果该键值原本已经存在,则会修改替换原来的键值,如果不存在则是创建该键值。 // 注意:SetValue()还有第三个参数,主要是用于设置键值的类型,如:字符串,二进制,Dword等等~~默认是字符串。如: // software.SetValue("test", "0", RegistryValueKind.DWord); //二进制信息 software.Close(); key.Close(); } catch (Exception ex) { LogHelper.WriteLogError(Lang.写入注册表第一次使用软件的时间时出错, ex); } } /// /// 写入软件版本号 /// /// public static void WriteAppVersion(string _AppVersion) { try { //创建注册表项 RegistryKey key = Registry.CurrentUser; //Registry.LocalMachine; RegistryKey software = key.CreateSubKey("SOFTWARE\\TEAMAAS"); //在HKEY_LOCAL_MACHINE\SOFTWARE下新建名为test的注册表项。如果已经存在则不影响! //打开注册表项 software = key.OpenSubKey("SOFTWARE\\TEAMAAS", true); //注意,如果该注册表项不存在,这调用这个方法会抛出异常 //注意该方法后面还可以有一个布尔型的参数,true表示可以写入。 //对键值的创建修改 software = key.OpenSubKey("SOFTWARE\\TEAMAAS", true); //该项必须已存在 software.SetValue("Version", _AppVersion); //在HKEY_LOCAL_MACHINE\SOFTWARE\TEAMScrew下创建一个名为“key”,值为“博客园”的键值。如果该键值原本已经存在,则会修改替换原来的键值,如果不存在则是创建该键值。 // 注意:SetValue()还有第三个参数,主要是用于设置键值的类型,如:字符串,二进制,Dword等等~~默认是字符串。如: // software.SetValue("test", "0", RegistryValueKind.DWord); //二进制信息 software.Close(); key.Close(); } catch (Exception ex) { LogHelper.WriteLogError(Lang.写入软件版本号时出错, ex); } } } }