old_flsystem/FLSystem/Program.cs

505 lines
21 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Api.Framework;
using Api.Framework.Cps;
using Api.Framework.Tools;
using CsharpHttpHelper;
using DevExpress.XtraEditors;
using FLSystem.Forms;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Threading;
using System.Xml;
using PCRobot.Pack;
using UI.Framework.Forms;
namespace FLSystem
{
static class Program
{
[DllImport("User32.dll")]
public static extern int PrivateExtractIcons(
string lpszFile, //文件名可以是exe,dll,ico,cur,ani,bmp
int nIconIndex, //从第几个图标开始获取
int cxIcon, //获取图标的尺寸x
int cyIcon, //获取图标的尺寸y
IntPtr[] phicon, //获取到的图标指针数组
int[] piconid, //图标对应的资源编号
int nIcons, //指定获取的图标数量,仅当文件类型为.exe 和 .dll时候可用
int flags //标志默认0就可以具体可以看LoadImage函数
);
[DllImport("User32.dll")]
public static extern bool DestroyIcon(
IntPtr hIcon //A handle to the icon to be destroyed. The icon must not be in use.
);
private static System.Drawing.Icon _ico;
public static System.Drawing.Icon ReadICO()
{
if (_ico != null) return _ico;
try
{
bool is_next = false;
NEXT:
DirectoryInfo info = new DirectoryInfo(Util.MapPath());
var files = info.GetFiles("*.exe");
foreach (var data in files)
{
var file = data.FullName;
if (file.EndsWith("FLSystem.exe")) continue;
if (file.EndsWith("ZipExtract.exe")) continue;
if (file.EndsWith("FLSystemMonitor.exe")) continue;
if (file.EndsWith("LevelUpdate.exe")) continue;
if (file.EndsWith("OnlineUpdate.exe")) continue;
if (file.EndsWith("VersionUpdate.exe")) continue;
//if (file.EndsWith("软件异常点我修复.exe")) continue;
if (file.EndsWith("检查更新.exe")) continue;
if (data.Name.Replace(".exe", "").ToLower().Contains("net")) continue;
//选中文件中的图标总数
var iconTotalCount = PrivateExtractIcons(file, 0, 0, 0, null, null, 0, 0);
//用于接收获取到的图标指针
IntPtr[] hIcons = new IntPtr[iconTotalCount];
//对应的图标id
int[] ids = new int[iconTotalCount];
//成功获取到的图标个数
var successCount = PrivateExtractIcons(file, 0, 256, 256, hIcons, ids, iconTotalCount, 0);
//遍历并保存图标
for (var i = 0; i < successCount; i++)
{
//指针为空,跳过
if (hIcons[i] == IntPtr.Zero) continue;
_ico = System.Drawing.Icon.FromHandle(hIcons[i]);
return _ico;
//内存回收
//DestroyIcon(hIcons[i]);
}
}
if (!is_next)
{
var exe = Util.MapFile("返利机器人.exe");
if (!File.Exists(exe))
{
File.WriteAllBytes(exe, FLSystem.Properties.Resources.);
goto NEXT;
}
}
}
catch (Exception)
{
}
_ico = Properties.Resources.exe;
return _ico;
}
/// <summary>
/// 过滤特殊字符,保留中文,字母,数字,和-
/// </summary>
/// <param name="inputValue">输入字符串</param>
/// <remarks>发件和收件详细地址有这种情况“仓场路40-73号迎园新村四坊69号202室”这种带有-的特殊字符不需要过滤掉</remarks>
/// <returns></returns>
public static string FilterChar(string inputValue)
{
// return Regex.Replace(inputValue, "[`~!@#$^&*()=|{}':;',\\[\\].<>/?~@#¥……&*&mdash;|{}【】;‘’,。/*-+]+", "", RegexOptions.IgnoreCase);
if (Regex.IsMatch(inputValue, "[A-Za-z0-9\u4e00-\u9fa5-]+"))
{
return Regex.Match(inputValue, "[A-Za-z0-9\u4e00-\u9fa5-]+").Value;
}
return "";
}
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main() {
//var sign = HttpExtend.GetMD5String("Cc"+ "_*54R56@%");
//var ss = Util.DecryptDES("lKMvY5Nw0DjddL2gR2Fhu6GFlMehR0ej70MzzGKOi17O/Lp6r5yD288MdztyYPWBkyA4bkKntMpOgsJ3cWZXau/X3U0aHK06");
//return;
//new Form1().ShowDialog();
//return;
//string src = string.Format("Data Source={0};Version=3;password={1};Journal Mode=WAL;", Util.MapFile("数据库.db", "Config"), "");
//var tempConfig = new ConnectionConfig() { ConnectionString = src, DatabaseType = DatabaseType.SQLITE };
//var session = ApiClient.GetSession(tempConfig);
//var db_order = session.FindSingle<Api.Framework.Model.fl_order_alimama>("select * from fl_order_alimama where trade_id = @trade_id and trade_parent_id = @trade_parent_id", new { trade_id = "271259596907722923", trade_parent_id = "271259596907722923" });
//return;
// ApiClient.SendDingdingMessageNewApi("TEST", "https://oapi.dingtalk.com/robot/send?access_token=24dbd211f807d4651d22d685c788c9df8548f23c09104646d88372d24b7549ef", "SECbb1f0d66c2ba8f71ff4e1620d99e2dd12191ab884d1567e2f949987b4187e59f");
try
{
EO.WebBrowser.Runtime.AddLicense(
"N4SOscufWbPw+g7kp+rp9um7aOPt9BDtrNzpz7iJWZeksefgpePzCOmMQ5ek" +
"scufWZekzQzjnZf4ChvkdpnJ4NnCoenz/hChWe3pAx7oqOXBs92wZ6emsdq9" +
"RoGkscufdabl/RfusLWRm8ufWZfAAB3jnunN/xHuWdvlBRC8W6i2wNywaKm0" +
"w9uhWer58/D3qeD29h7ArbSmwt2uaqizw9uxapmkBxDxrODz/+iha6emsdq9" +
"RoGkscufdert+Bngrez29unLn9D7BR7Wb8T66/nCm6y40hu2b8zFzui7aOrt" +
"+Bngrez29umMQ7Oz/RTinuX39umMQ3Xj7fQQ7azcwp61n1mXpM0X6Jzc8gQQ" +
"yJ21uur5sXGqusrz0XCwtMTis4+zs/0U4p7l9/b043c=");
}
catch (Exception)
{
}
try
{
Robot.Framework.Utils.Util.SetWebBrowserFeatures(11);
Robot.Framework.RobotServer.Servers.Add("robotsign.api.52cmg.cn");
DevExpressCrack.Crack.Init();
List<string> files = new List<string>();
files.Add(Util.MapFile(@"QQPlus.Framework.dll", @"Assembly\apifile"));
files.Add(Util.MapFile(@"FLSystem.dubug", @"Assembly\apifile"));
files.Add(Util.MapFile(@"MaxQQ.db", @"Assembly\apifile"));
files.Add(Util.MapFile(@"Activity.dll", @"Plugin"));
files.Add(Util.MapFile(@"Runtime.dll", @"Plugin"));
files.Add(Util.MapFile(@"FLSystem.exe.se"));
files.Add(Util.MapFile(@"LevelUpdate.exe"));
files.Add(Util.MapFile(@"OnlineUpdate.exe"));
files.Add(Util.MapFile(@"version.txt"));
files.Add(Util.MapFile(@"Update.zip"));
files.Add(Util.MapFile(@"VersionUpdate.exe"));
files.Add(Util.MapFile(@"OnlineUpdate.exe"));
files.Add(Util.MapFile("软件异常点我修复.exe"));
foreach (var item in files)
{
try
{
File.Delete(item);
}
catch (Exception ex)
{ }
}
}
catch (Exception ex)
{ }
if (!Tools.GetDotNetRelease(393297))//.net版本 参数(393297)在这里面看 https://docs.microsoft.com/zh-tw/dotnet/framework/migration-guide/versions-and-dependencies
{
XtraMessageBox.Show(@"检测到系统可能未安装.Net FrameWork 4.6.1", "温馨提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
//获取本机调试码
//Computer cx = Computer.Instance();
//var md5 = HttpHelper.ToMD5(cx.ComputerName + cx.CpuID + cx.LoginUserName);
////获取开发调试
//var debug = EncDebugAcc(md5);
//var tb_data = "{'pageNum' : '0','activityName' : 'orderCommon'}";
//var tb_api = "mtop.taobao.chatting.group.recommend";
//var tb_version = "1.0";
// GetSign("WGggVwxCetYDAJSz3rev6wHz", "365052383", "21646297", tb_data, tb_api,tb_version, "70047844f777bb980e529af7a40c3ab3", "10000878@tdvideo_android_4.2.2", "AvMoMBLo1CCz-eMOUfuejUazQmEyetOX8RDVE6g", "39.916295", "116.410344","27");
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
ThreadPool.SetMaxThreads(int.MaxValue, int.MaxValue);
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
ReadICO();
// GetXsign("mtop.taobao.rate.detaillist.get","");
CheckMoreopen();
//定时输出日志
Task.Run(() =>
{
string log = Util.MapFile("Runtime.log");
while (true)
{
try
{
File.WriteAllText(log, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
}
catch { }
Thread.Sleep(1000 * 10);
}
});
//检查监控是否启动
try
{
var location = AppDomain.CurrentDomain.BaseDirectory;
var list = Process.GetProcessesByName("FLSystemMonitor").ToList();
bool is_start = false;
foreach (var item in list)
{
try
{
var fileName = item.MainModule.FileName;
var path = fileName.Substring(0, fileName.Length - 19);
if (location == path)
{
is_start = true; break;
}
}
catch { }
}
if (!is_start)
{
var jk_file = Util.MapFile("FLSystemMonitor.exe");
if (!File.Exists(jk_file))
{
var jk_old_file = Util.MapFile("FLSystemMonitor.exe", "Assembly\\apifile");
if (File.Exists(jk_old_file))
{
//File.Copy(jk_old_file,jk_file);
////使用File的静态方法删除路径下的一个文件
//File.Delete(jk_old_file);
//使用File的静态方法移动路径下的一个文件
File.Move(jk_old_file, jk_file);
}
}
Process.Start("FLSystemMonitor.exe", "check");
}
}
catch (Exception)
{ }
DeleteFile(Util.MapFile("Grant.Framework.dll", @"Assembly\library"));
DeleteFile(Util.MapFile("Easy4net.dll", @"Assembly\apifile"));
SetAllowUnsafeHeaderParsing20(true);
//CheckUpdate();
if (CheckUpdate())
return;
Application.Run(new main());
}
private static string EncDebugAcc(string md5)
{
string rsakey = "<RSAKeyValue><Modulus>nz1sjqJbDn58VvAs+vUZtOZY4fgSQP2DvmagOEXsx/v0ZJ6ykDi71jtnU01ZD40xBt0fooUiC6VEobUJqdLqoAnqUZGqkD9IPZaVDPDYg6aXowhKZJP4Ipxq0eaXBWfROOBAVF/uFkZ27sjcuCfCpzDafOoRLRQCLQ2TKRgfYd0=</Modulus><Exponent>AQAB</Exponent><P>2WfOYWp6o8EZm14a/K0iFGrKq4QQ9q719GKw2CSNZbmSsN0azhLHKG1iYQn0M/qEzRbc1R79vLTJIF3VwbieDw==</P><Q>u4I6+v5RANurQV6YH7kGAmsoAHZhx8hbBUnRFKQyCK3LJbzq8gXeVU7mzzOkSzVMoeGEIVUYXb4zL87txkytUw==</Q><DP>qwh1XkIMdWNmp8oi5QG3u+Q/ySs+xTLjn/08Lu6ippKVirqHafNv5qgXK0xPZ80ASPBhjvCwoZKAYAwyLBL3lQ==</DP><DQ>SQP9U5+Ui3D+zwW21yOFY4u2l/eBO/qY9wY3lIIbuaVzZc6a7oO6gB2pYyYI5ABtRtw6R4CLbHWUGRnLHVzeYQ==</DQ><InverseQ>M1zD3kKgwgQcgWqilmE9/jsAfDTWBaf/2sZDusfS4zhNQtPbZuYtAQOJ5lymvUKkl5BIHrPiQ7LydG47dMiO5w==</InverseQ><D>P6IfGFx+wKsA6wjtIJgDXsvR5vLn8HqeQ97k1bfzp/LiNbdJKeLSBQkWAC7fkRxd5B1G//3tnfO8Glaq9ucnBI1CwJgvoO4h6YtyjmscC8TFpMEu3TfxU1SScokjyciiaXpQsAilFX3RQE1eARuvGaZxwbO3KbAubU6ydZGBK00=</D></RSAKeyValue>";
RSACryption rsa = new RSACryption();
var text = rsa.RsaEncrypt(md5, rsakey);
//Console.WriteLine($"请在根目录建立文件debug.txt,并存放值:\r\n{text}");
return rsa.RsaEncrypt(md5, rsakey);
}
private static void DeleteFile(string fileName)
{
try
{
if (File.Exists(fileName)) File.Delete(fileName);
}
catch { }
}
// <summary>
// 初始化Cef配置此方法代码不能放于Main方法中否则Cef无法正常运行别问为什么我也不清楚
// </summary>
#region
static bool SetAllowUnsafeHeaderParsing20(bool useUnsafe)
{
try
{
//Get the assembly that contains the internal class
System.Reflection.Assembly aNetAssembly = System.Reflection.Assembly.GetAssembly(typeof(System.Net.Configuration.SettingsSection));
if (aNetAssembly != null)
{
//Use the assembly in order to get the internal type for the internal class
Type aSettingsType = aNetAssembly.GetType("System.Net.Configuration.SettingsSectionInternal");
if (aSettingsType != null)
{
//Use the internal static property to get an instance of the internal settings class.
//If the static instance isn't created allready the property will create it for us.
object anInstance = aSettingsType.InvokeMember("Section",
System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.GetProperty | System.Reflection.BindingFlags.NonPublic, null, null, new object[] { });
if (anInstance != null)
{
//Locate the private bool field that tells the framework is unsafe header parsing should be allowed or not
System.Reflection.FieldInfo aUseUnsafeHeaderParsing = aSettingsType.GetField("useUnsafeHeaderParsing", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
if (aUseUnsafeHeaderParsing != null)
{
aUseUnsafeHeaderParsing.SetValue(anInstance, useUnsafe);
return true;
}
}
}
}
return false;
}
catch (Exception ex)
{
BaseForm.ShowError(ex, "系统.异常");
}
return false;
}
static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
try
{
string str = GetExceptionMsg(e.Exception, e.ToString(), "线程");
//MessageBox.Show(str, "子线程错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
BaseForm.ShowError(str);
}
catch (Exception ex)
{
BaseForm.ShowError(ex, "系统线程异常");
}
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
try
{
string str = GetExceptionMsg(e.ExceptionObject as Exception, e.ToString(), "未知");
// MessageBox.Show(str, "主线程错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
BaseForm.ShowError(str);
}
catch (Exception ex)
{
BaseForm.ShowError(ex, "系统未知异常");
}
}
static string GetExceptionMsg(Exception ex, string backStr, string r)
{
StringBuilder sb = new StringBuilder();
sb.AppendLine($"****************************异常文本_{r}****************************");
sb.AppendLine("【出现时间】:" + DateTime.Now.ToString());
if (ex != null)
{
if (ex.Message == "This version of Windows is not supported.")
{
return "Windows版本不支持";
}
sb.AppendLine("【异常类型】:" + ex.GetType().Name);
sb.AppendLine("【异常信息】:" + (ex.Message == "This version of Windows is not supported." ? "Windows版本不支持" : ex.Message));
sb.AppendLine("【堆栈调用】:" + ex.StackTrace);
}
else
{
sb.AppendLine("【未处理异常】:" + backStr);
}
sb.AppendLine("***************************************************************");
return sb.ToString();
}
#endregion
#region
public static bool CheckUpdate()
{
try
{
var LatestData = UpdateClient.GetCloudFileHist();
if (!string.IsNullOrWhiteSpace(LatestData))
{
if (new UpdateForm(LatestData).ShowDialog() == DialogResult.OK)
{
Process.Start("检查更新.exe", "FLSystem.exe");
//Thread.Sleep(100);
return true;
}
}
//Thread.Sleep(100);
}
catch (Exception ex)
{ }
return false;
}
/// <summary>
/// 防多开限制
/// </summary>
public static void CheckMoreopen()
{
string strFullPath = Application.ExecutablePath;
string strFileName = System.IO.Path.GetFileName(strFullPath);
string curPath = Util.MapFile(strFileName).ToLower();
int count = 0;
foreach (Process p in Process.GetProcessesByName(strFileName.Replace(".exe", "")))
{
string path = p.MainModule.FileName.ToLower();
if (path == curPath)
count++;
}
#region
var reset_program = Util.MapFile("reset", "File");//用于导入导出插件重启用,文件存在允许重启
var reset = !File.Exists(reset_program);//保存至变量
try
{
File.Delete(reset_program);//删除文件
}
catch (Exception)
{ }
#endregion
if (count > 1)
{
if (reset)
{
BaseForm.ShowError("对不起,您不能在同一个目录重复启动该软件!");
// BaseForm.ShowError(str);
// MessageBox.Show("对不起,您不能在同一个目录重复启动该软件!", "防多开提醒", MessageBoxButtons.OK, MessageBoxIcon.Error);
Exit();
}
}
}
/// <summary>
/// 退出
/// </summary>
public static void Exit(bool start = false)
{
try
{
if (start)
{
//程序位置
string strAppFileName = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
System.Diagnostics.Process myNewProcess = new System.Diagnostics.Process();
//要启动的应用程序
myNewProcess.StartInfo.FileName = strAppFileName;
// 设置要启动的进程的初始目录
myNewProcess.StartInfo.WorkingDirectory = Application.ExecutablePath;
//启动程序
myNewProcess.Start();
}
//结束该程序
// Application.Exit();
//结束该所有线程
//Environment.Exit(0);
Process.GetCurrentProcess().Kill();
}
catch (Exception)
{ }
}
#endregion
}
}