277 lines
10 KiB
C#
277 lines
10 KiB
C#
using BaseFunction;
|
||
using Microsoft.Win32;
|
||
using System;
|
||
using System.Diagnostics;
|
||
using System.Runtime.InteropServices;
|
||
using System.Text;
|
||
using System.Windows.Forms;
|
||
|
||
namespace NSAnalysis
|
||
{
|
||
internal static class Program
|
||
{
|
||
#region CLMS 授权
|
||
|
||
/// <summary>
|
||
/// 功能:使用MORCODE.DLL前验证使用软件是否正确,否则其他函数都不可正常调用
|
||
/// </summary>
|
||
/// <param name="str">验证内容为软件指纹文件中字符串</param>
|
||
/// <returns>
|
||
/// TRUE :该软件可正常调用
|
||
/// FALSE :该软件不可正常调用
|
||
/// </returns>
|
||
[DllImport("MORCODE.dll", EntryPoint = "CLM_Login", CallingConvention = CallingConvention.Cdecl)]
|
||
public static extern bool CLM_Login(StringBuilder str);
|
||
|
||
/// <summary>
|
||
/// 退出前执行一次,释放内存,记录使用信息
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
[DllImport("MORCODE.dll", EntryPoint = "CLM_Logout", CallingConvention = CallingConvention.Cdecl)]
|
||
public static extern bool CLM_Logout();
|
||
|
||
/// <summary>
|
||
/// 自动检查电脑中是否有当前软件的许可信息,过期/非本机电脑/其他软件 的许可证书都不会识别
|
||
/// </summary>
|
||
/// <returns>
|
||
/// TRUE :有该软件许可证书
|
||
/// FALSE :没有该软件许可证书
|
||
/// </returns>
|
||
[DllImport("MORCODE.dll", EntryPoint = "CLM_Login_Scope", CallingConvention = CallingConvention.Cdecl)]
|
||
public static extern bool CLM_Login_Scope();
|
||
|
||
/// <summary>
|
||
/// 输入模块ID验证模块可用性
|
||
/// </summary>
|
||
/// <param name="mod">模块ID</param>
|
||
/// <param name="type">暂无定义</param>
|
||
/// <returns>
|
||
/// TRUE :该模块可用
|
||
/// FALSE :该模块不可用
|
||
/// </returns>
|
||
[DllImport("MORCODE.dll", EntryPoint = "CLM_ModuleIsLicensed", CallingConvention = CallingConvention.Cdecl)]
|
||
public static extern bool CLM_ModuleIsLicensed(ref UInt16 mod, ref UInt16 type);
|
||
|
||
/// <summary>
|
||
/// 获取到期日期
|
||
/// </summary>
|
||
/// <param name="mon"></param>
|
||
/// <param name="day"></param>
|
||
/// <param name="year"></param>
|
||
/// <returns></returns>
|
||
|
||
[DllImport("MORCODE.dll", EntryPoint = "CLM_GetWarrantyExpiration", CallingConvention = CallingConvention.Cdecl)]
|
||
public static extern bool CLM_GetWarrantyExpiration(ref int mon, ref int day, ref int year);
|
||
|
||
private static int gCLMSModeID = 0;
|
||
private static int gAuthorizationMode = 0;
|
||
|
||
#endregion CLMS 授权
|
||
|
||
/// <summary>
|
||
/// The main entry point for the application.
|
||
/// </summary>
|
||
[STAThread]
|
||
private static void Main()
|
||
{
|
||
Application.EnableVisualStyles();
|
||
Application.SetCompatibleTextRenderingDefault(false);
|
||
|
||
#region 创建Log文件
|
||
|
||
LogDebugDfn.strStartTime = DateTime.Now.ToString("yyyy.MM.dd HH-mm-ss");
|
||
System.IO.TextWriter log = new System.IO.StreamWriter(LogDebugDfn.strDebugFile); //Debug.txt
|
||
TextWriterTraceListener logger = new TextWriterTraceListener(log);
|
||
Trace.Listeners.Add(logger);
|
||
MyBase.TraceWriteLine("--软件Program Main函数开始执行--"); //写入log文件
|
||
ConfigDfn.LoadConfigFile(); //加载配置参数
|
||
|
||
gCLMSModeID = FileIni.ReadInt(ConfigDfn.strConfigFile, "Chery", "CLMSModeID", 1);
|
||
gAuthorizationMode = FileIni.ReadInt(ConfigDfn.strConfigFile, "Chery", "AuthorizationMode", 1);
|
||
|
||
#endregion 创建Log文件
|
||
|
||
if (gAuthorizationMode == 1)
|
||
{
|
||
MyBase.TraceWriteLine("Log in using the CLMS authorization.");
|
||
|
||
#region 检测CLMS
|
||
|
||
/////1登陆验证
|
||
//验证内容为软件指纹文件中字符串,功能:使用MORCODE.DLL前验证使用软件是否正确,否则其他函数都不可正常调用
|
||
StringBuilder password = new StringBuilder("vravnhNYybkmDkHDPKhVIwbHMoqHktgqWHFkBTOUsZLLVLwaAOkPIFFoVffUnSqUkCApSxrWQmsKvYCdVUpZLOhuHshKFbUPezYYbyQCgUoHrFOaaLVSosAapdVagrfFSqDUzxCvVuSJodxkjBiCJdRUfhCIfyRzjLdTfkxtUHPYUHyQbzOaJFvdSbzLihYmuhLHFNUSbERcAFbnrvNQtZOCUSUnHFcySXzTbfqTgzeaWQrjoSTzEUYDkEUmqusV");
|
||
bool res = CLM_Login(password);
|
||
if (!res)
|
||
{
|
||
MyBase.TraceWriteLine("CLMS Login Failed.");
|
||
MessageBox.Show("CLMS Login fails. Please authorize the user first! ", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||
return;
|
||
}
|
||
/////2检查许可
|
||
//该函数自动检查电脑中是否有当前软件的许可信息,过期/非本机电脑/其他软件 的许可证书都不会识别
|
||
res = CLM_Login_Scope();
|
||
if (!res)
|
||
{
|
||
//检查许可失败
|
||
MyBase.TraceWriteLine("CLMS check license failed! Please authorize the operation.");
|
||
MessageBox.Show("The CLMS failed to check for permissions. Please authorize first! ", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||
return;
|
||
}
|
||
//3获取许可模块是否可用
|
||
//输入模块ID验证模块可用性
|
||
UInt16 mod = (UInt16)gCLMSModeID;//模块ID
|
||
UInt16 type = 0;//暂无定义
|
||
|
||
res = CLM_ModuleIsLicensed(ref mod, ref type);//res true:可用 false:不可用
|
||
if (!res)
|
||
{
|
||
MyBase.TraceWriteLine("The CLMS module is unavailable!");
|
||
MessageBox.Show(mod.ToString() + " The CLMS module is unavailable!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||
return;
|
||
}
|
||
|
||
//4获取到期日期
|
||
int Year = 0, Month = 0, Day = 0;
|
||
res = CLM_GetWarrantyExpiration(ref Month, ref Day, ref Year);
|
||
if (!res)
|
||
{
|
||
//登陆验证失败
|
||
MyBase.TraceWriteLine("Login verification failed, authorization time is up, please contact Hexagon company for authorization! The maturity time is:" + Year.ToString() + "." + Month.ToString() + "." + Day.ToString());
|
||
MessageBox.Show("Login verification failed, authorization time is up, please contact Hexagon company for authorization! The maturity time is:" + Year.ToString() + "." + Month.ToString() + "." + Day.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||
return;
|
||
}
|
||
|
||
if (res)
|
||
{
|
||
ConfigDfn.strExpiredTime = Year.ToString() + "-" + Month.ToString() + "-" + Day.ToString();
|
||
}
|
||
|
||
#endregion 检测CLMS
|
||
|
||
Application.Run(new CenterControl());
|
||
}
|
||
else
|
||
{
|
||
MyBase.TraceWriteLine("Log in using the original authorization mode.");
|
||
//Licence.GetRegisterInfo();
|
||
//Licence.Encryption_DLL();
|
||
Application.Run(new CenterControl());
|
||
}
|
||
}
|
||
}
|
||
|
||
public class Licence
|
||
{
|
||
//===============================================================
|
||
|
||
#region 1、加密动态库加密
|
||
|
||
public static void Encryption_DLL()
|
||
{
|
||
Covert.Program Mycheck = new Covert.Program();
|
||
if (Mycheck.CheckLicence(Application.StartupPath + "\\Key\\reg.key", "PCControl"))
|
||
{
|
||
MyBase.TraceWriteLine("软件授权成功");
|
||
ConfigDfn.strExpiredTime = Covert.Parameter.ExpiredTime.ToString("yyyy-MM-dd HH:mm:ss");
|
||
if (IsSoftwareRunning())
|
||
{
|
||
MessageBox.Show("库位管理软件已经存在,请关闭后重新尝试!", "警告");
|
||
System.Environment.Exit(0);
|
||
return;
|
||
}
|
||
Application.Run(new CenterControl());
|
||
}
|
||
else
|
||
{
|
||
MessageBox.Show("Did not pass the certification!\r\n" + Covert.Parameter.ExpiredTime.ToString());
|
||
BaseFunction.MyBase.TraceWriteLine("软件授权失败");
|
||
}
|
||
}
|
||
|
||
#endregion 1、加密动态库加密
|
||
|
||
private static bool IsSoftwareRunning()
|
||
{
|
||
int Num = 0;
|
||
Process[] processes = Process.GetProcesses();
|
||
foreach (Process instance in processes)
|
||
{
|
||
string pro = instance.ProcessName;
|
||
if (pro.ToLower() == "cheryanalysis")
|
||
{
|
||
Num++;
|
||
}
|
||
}
|
||
if (Num > 1)
|
||
return true;
|
||
else
|
||
return false;
|
||
}
|
||
|
||
//===============================================================
|
||
|
||
#region 读取注册表信息,准备各种时间
|
||
|
||
private static string PassWord = "";
|
||
private static string PassData = "";
|
||
private static Int64 PassNow = 0;
|
||
private static Int64 LtOk = 20160101080000; //开始日期
|
||
private static Int64 LtOk2now;
|
||
|
||
public static void GetRegisterInfo()
|
||
{
|
||
LtOk2now = Convert.ToInt64(System.DateTime.Now.ToString("yyyyMMddHHmmss"));
|
||
RegistryKey pregkey;
|
||
RegistryKey pregkey1;
|
||
RegistryKey pregkey2;
|
||
bool RegKey = false;
|
||
try
|
||
{
|
||
do
|
||
{
|
||
pregkey = Registry.CurrentUser.OpenSubKey("software", true);
|
||
pregkey1 = Registry.CurrentUser.OpenSubKey("software\\sunpike", true);
|
||
pregkey2 = Registry.CurrentUser.OpenSubKey("software\\sunpike\\PCControl", true);
|
||
if (pregkey1 != null)
|
||
{
|
||
if (pregkey2 != null)
|
||
{
|
||
if (pregkey2.GetValue("Pass") == null) { pregkey2.SetValue("Pass", ""); }
|
||
if (pregkey2.GetValue("Data") == null) { pregkey2.SetValue("Data", ""); }
|
||
if (pregkey2.GetValue("Now") == null) { pregkey2.SetValue("Now", LtOk.ToString()); }
|
||
|
||
PassWord = pregkey2.GetValue("Pass").ToString();
|
||
PassData = pregkey2.GetValue("Data").ToString();
|
||
PassNow = Convert.ToInt64(pregkey2.GetValue("Now").ToString());//上次结束APP的时间
|
||
RegKey = true;
|
||
}
|
||
else { pregkey1.CreateSubKey("PCControl"); }
|
||
}
|
||
else { pregkey.CreateSubKey("sunpike"); }
|
||
} while (!RegKey);
|
||
if (LtOk2now > PassNow)
|
||
pregkey2.SetValue("Data", LtOk.ToString());
|
||
else
|
||
pregkey2.SetValue("Now", LtOk.ToString());
|
||
pregkey.Close();
|
||
pregkey1.Close();
|
||
pregkey2.Close();
|
||
}
|
||
catch
|
||
{
|
||
MyBase.TraceWriteLine("--读取注册信息时遭到破坏。");
|
||
MessageBox.Show("读取注册信息时遭到破坏。");
|
||
//
|
||
//有一个复位的方法,就是客户打电话给我,我给他一串数据(时间加校验码),填入后,通过校验是合适的时间,就恢复这串码中的时间,
|
||
//举例:
|
||
//目前是2014年03月19日11点30分15秒:
|
||
// 20140319113015 --加密--> 3分十位2年千位4年个位1秒十位3校验位(前4位相加之和保证个位是3)1年十位1时个位1时十位5秒个位3校验位(前4位相加之和保证个位是3)0月十位0年百位1日十位0分个位2校验位(前4位相加之和保证个位是3)3月个位9日个位0校验位(前2位相加之和保证个位是3)
|
||
// 3 2 4 1 3 1 1 1 5 5 0 0 1 0 2 3 0 0
|
||
// 324131115500102300
|
||
return;
|
||
}
|
||
}
|
||
|
||
#endregion 读取注册表信息,准备各种时间
|
||
}
|
||
} |