using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TeamAAS_VP;
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("读取注册表时出错!", 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("注册表写入时出错!", 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("检测软件是否首次启动时出错!",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("写入注册表第一次使用软件的时间时出错!", 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("写入软件版本号时出错!", ex);
}
}
}
}