| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302 |
- 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
- {
- /// <summary>
- /// 注册表操作
- /// </summary>
- public class RegeditHelper
- {
- /// <summary>
- /// 读取注册表
- /// </summary>
- /// <param name="value">读取到的注册表中的值</param>
- /// <returns>返回是否读取成功!</returns>
- 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;
- }
- }
- /// <summary>
- /// 写入注册表
- /// </summary>
- /// <param name="value">要写入的信息</param>
- /// <returns>返回是否写入成功</returns>
- 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;
- }
- }
- /// <summary>
- /// 判断注册表是否存在
- /// </summary>
- /// <returns></returns>
- 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;
- }
- /// <summary>
- /// 判断键值是否存在
- /// </summary>
- /// <returns></returns>
- 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;
- }
- /// <summary>
- /// 是否时第一次在此PC上使用此软件
- /// </summary>
- /// <returns></returns>
- 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;
- }
- }
- /// <summary>
- /// 写入注册表第一次使用软件的时间
- /// </summary>
- 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);
- }
- }
- /// <summary>
- /// 写入软件版本号
- /// </summary>
- /// <param name="_AppVersion"></param>
- 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);
- }
- }
- }
- }
|