2025-03-28 09:49:56 +08:00

617 lines
31 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 System;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Threading;
namespace ConnectPoint
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
#region
/// <summary>
/// 状态反馈主定时器
/// </summary>
private readonly DispatcherTimer WorkerTimer;
/// <summary>
/// 平台稽核结果校验线程定时器
/// </summary>
private readonly DispatcherTimer CheckAuditTimer;
/// <summary>
/// 数据传输接口地址
/// </summary>
private string WebServiceUrl { get; set; }
/// <summary>
/// 主支付通道接口地址
/// </summary>
private string PayServiceUrl { get; set; }
///// <summary>
///// 数据传输线程类
///// </summary>
//GetHttpData.SDK.ThreadPool.ClientThread DataClientThread { get; set; }
private Thread ClearThread { get; set; }
ESSupport.Transfer.PosDataUpload DataUpload { get; set; }
ESSupport.Transfer.PosDataDownload PosDataDownload { get; set; }
#endregion
public MainWindow()
{
InitializeComponent();
#region
WorkerTimer = new DispatcherTimer
{
Interval = TimeSpan.FromSeconds(60)
};
WorkerTimer.Tick += WorkerTimer_Tick;
WorkerTimer.Start();
#endregion
#region 10
CheckAuditTimer = new DispatcherTimer
{
Interval = TimeSpan.FromMinutes(10)
};
CheckAuditTimer.Tick += CheckAuditTimer_Tick;
CheckAuditTimer.Start();
#endregion
}
#region ->
/// <summary>
/// 主程序启动加载事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Window_Loaded(object sender, RoutedEventArgs e)
{
this.Hide();
ESSupport.Lib.LogHelper.WriteServiceLog($"PB系统心跳程序已启动。");
#region
ClearThread = new Thread(() =>
{
//升级本地数据库表结构
try
{
ESSupport.Lib.LogHelper.WriteServiceLog($"启动数据表升级检查。");
ESSupport.Lib.DataBaseUpdate.PosDataBaseUpdate();
}
catch { }
try
{
ESSupport.Lib.LogHelper.WriteServiceLog($"启动历史数据清理。");
#region 60
//获取服务区编码
string _ServerPartCode = ESSupport.Pos.PosConfigInit.ConfigurationValues("serverpartcode", string.Empty);
//获取门店编码
string _ShopCode = ESSupport.Pos.PosConfigInit.ConfigurationValues("shopcode", string.Empty);
//获取数据保留时长
int _EffectiveDay = int.Parse(ESSupport.Pos.PosConfigInit.ConfigurationValues("effective_day", "60"));
//获取门店ID
string _ServerPartShopID = ESSupport.Lib.SyBaseHelper.QueryOdbc(
$@"SELECT SERVERPARTSHOP_ID FROM T_SHOPMESSAGE
WHERE SERVERPARTCODE = '{_ServerPartCode}' AND
SHOPCODE = '{_ShopCode}'").Tables[0].Rows[0]["SERVERPARTSHOP_ID"].ToString();
//清理历史过期数据
//读取上次启动同步的时间
string _strLocalDate = ESSupport.Pos.PosConfigInit.ConfigurationValues("syncdtime", "2021/01/01 00:00:00");
if (DateTime.TryParse(_strLocalDate, out DateTime _LocalDate))
{
//本地时间与上次同步时间误差在3天内时启动数据库过期数据清理
if (DateTime.Now.Subtract(_LocalDate).TotalDays < 3 && DateTime.Now.Subtract(_LocalDate).TotalDays >= 0)
{
ESSupport.Lib.DataBaseUpdate.ClearData(_ServerPartCode, _ShopCode, _ServerPartShopID, _EffectiveDay);
}
}
#endregion
}
catch { }
//清理过期备份数据文件
try
{
#region
//读取上次启动同步的时间
string _strLocalDate = ESSupport.Pos.PosConfigInit.ConfigurationValues("syncdtime", "2021/01/01 00:00:00");
if (DateTime.TryParse(_strLocalDate, out DateTime _LocalDate))
{
//本地时间同步失败超过3天或本地时间小于上次同步时间不执行超时备份文件直接清理
if (DateTime.Now.Subtract(_LocalDate).TotalDays > 3 || DateTime.Now.Subtract(_LocalDate).TotalDays < 0)
{
ESSupport.Lib.DataBaseUpdate.ClearDataBackup(AppDomain.CurrentDomain.BaseDirectory + "\\DataBackup", 60, false);
}
else
{
ESSupport.Lib.DataBaseUpdate.ClearDataBackup(AppDomain.CurrentDomain.BaseDirectory + "\\DataBackup", 60, true);
}
}
#endregion
}
catch { }
UpdateApp(new Version(2, 0, 2, 4));
//检查自动更新配置文件Update.xml参数
ESSupport.Pos.ThreadHelper.NewSystemConfig();
})
{ IsBackground = true };
ClearThread.Start();
#endregion
//打开被禁用的网卡
ESSupport.Lib.PCHelper.OpenNetWork();
string str_ServerIP = Common.PosControl.IsCloudURL ? "pos.eshangtech.com" : ESSupport.Pos.PosConfigInit.ServerIP;
#region PB版本收银系统结账后立即关机导致版本信息未回传至服务器的问题
//程序启动时立即上报一次心跳数据解决PB版本收银系统结账后立即关机导致版本信息未回传至服务器的问题
try
{
if (ESSupport.Common.PosControl.StateFeedbackThread == null ||
!ESSupport.Common.PosControl.StateFeedbackThread.IsAlive)
{
ESSupport.Common.PosControl.StateFeedbackThread = new Thread(() =>
{
if (DataUpload == null)
{
//内网模式下通过本地服务器Nginx代理访问云端接口
DataUpload = new ESSupport.Transfer.PosDataUpload(ESSupport.Pos.PosConfigInit.ServerpartCode,
ESSupport.Pos.PosConfigInit.ShopCode, ESSupport.Pos.PosConfigInit.MachineCode,
$"http://{str_ServerIP}:7198/webApi_publish");
//绑定消息回调监听事件
DataUpload.NotifyEvent += DataUpload_NotifyEvent;
}
DataUpload.DataUpload(ESSupport.Transfer.TableDataType.RecordStateFeedBack, DateTime.Now);
})
{
IsBackground = true
};
ESSupport.Common.PosControl.StateFeedbackThread.Start();
}
}
catch { }
#endregion
//启动时立即对当天的移动支付交易记录进行复查校验
if (ESSupport.Common.PosControl.MobilePayCheckThread == null ||
!ESSupport.Common.PosControl.MobilePayCheckThread.IsAlive)
{
ESSupport.Common.PosControl.MobilePayCheckThread = new Thread(() =>
{
//对待确认的移动支付交易进行交易结果查询
ESSupport.Pos.ThreadHelper.MobilePayQueryCheck(DateTime.Today.AddMinutes(-10), DateTime.Now);
})
{
IsBackground = true
};
ESSupport.Common.PosControl.MobilePayCheckThread.Start();
}
#region PB系统开机时进行一次传输和数据下载PB版本系统
#region
//初始化数据传输程序
if (PosDataDownload == null)
{
//测试当前网络是否可以直接访问公网
if (Common.PosControl.IsCloudURL)
{
//公网模式下,直接访问云端接口地址
PosDataDownload = new ESSupport.Transfer.PosDataDownload(ESSupport.Pos.PosConfigInit.ServerpartCode,
ESSupport.Pos.PosConfigInit.ShopCode, ESSupport.Pos.PosConfigInit.MachineCode, Common.PosControl.PosDataDownloadURL);
}
else
{
//内网模式下通过本地服务器Nginx代理访问云端接口
PosDataDownload = new ESSupport.Transfer.PosDataDownload(ESSupport.Pos.PosConfigInit.ServerpartCode,
ESSupport.Pos.PosConfigInit.ShopCode, ESSupport.Pos.PosConfigInit.MachineCode, $"http://{ESSupport.Pos.PosConfigInit.ServerIP}:7198/webApi_publish");
}
PosDataDownload.NotifyEvent += PosDataDownload_NotifyEvent; ;
}
#endregion
try
{
if (ESSupport.Pos.PosConfigInit.ConfigurationValues("NewSystem", "1") == "0")
{
try
{
//与服务器校对时间
DateTime date_Loacl = DateTime.Now;
DateTime date_Server = date_Loacl;
date_Server = ESSupport.Lib.HttpHelper.GetBeijingTime($"http://{str_ServerIP}:17080/DataTransferService/Service.asmx", date_Loacl);
if (date_Server != date_Loacl && date_Server > new DateTime(2021, 06, 01))
{
if (Common.LocalTimeHelper.SetLocalDateTime(date_Server))
{
ESSupport.Pos.PosConfigInit.UpdateConfigUration("syncdtime", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
ESSupport.Lib.LogHelper.WriteServiceLog($"与服务器校准时间成功。校准前本地收银机时间【{date_Loacl}】;获取到的云服务器时间【{date_Server}】");
}
else
{
ESSupport.Lib.LogHelper.WriteServiceLog($"与服务器校准时间失败。校准前本地收银机时间【{date_Loacl}】;获取到的云服务器时间【{date_Server}】");
}
}
else
{
ESSupport.Lib.LogHelper.WriteServiceLog($"与服务器时间一致。校准前本地收银机时间【{date_Loacl}】;获取到的云服务器时间【{date_Server}】");
}
}
catch (Exception ex)
{
ESSupport.Lib.LogHelper.WriteServiceLog($"收银软件启动,与服务器校准时间失败。原因:{ex.Message}");
}
//获取服务区编码
string str_ServerPartCode = ESSupport.Pos.PosConfigInit.ConfigurationValues("serverpartcode", string.Empty);
//获取门店编码
string str_ShopCode = ESSupport.Pos.PosConfigInit.ConfigurationValues("shopcode", string.Empty);
//h获取收银机号
string str_MachineCode = ESSupport.Pos.PosConfigInit.ConfigurationValues("machinecode", string.Empty);
if (Common.PosControl.DataTransByPB == null)
{
Common.PosControl.DataTransByPB = new Common.CashierDataTransByPB(str_ServerPartCode, str_ShopCode, str_MachineCode, str_ServerIP);
}
//上传机器信息到总部
DataUpload.DataUpload(ESSupport.Transfer.TableDataType.UploadMachineInfo, DateTime.Now);
#region Socket通讯客户端
//启动Socket客户端连接线程
if (Common.PosControl.PosSocket == null)
{
//未设置内网Nginx代理服务器时默认直接访问云端接口地址
Common.PosControl.PosSocket = new ESSupport.Transfer.PosSuperSocketClient(
$"ws://{str_ServerIP}:7199/?ServerpartCode={str_ServerPartCode}&" +
$"ShopCode={str_ShopCode}&MachineCode={str_MachineCode}",
str_ServerPartCode, str_ShopCode, str_MachineCode, $"http://{str_ServerIP}:7198/webApi_publish");
Common.PosControl.PosSocket.NotifyEvent += PosSocket_NotifyEvent;
}
if (!Common.PosControl.PosSocket.ClientRuning)
{
Common.PosControl.PosSocket.Start();
}
#endregion
#region PB区服传输指令通知检测程序启动
if (Common.PosControl.DataTransThread == null || !Common.PosControl.DataTransThread.IsAlive)
{
Common.PosControl.DataTransThread = new Thread(() =>
{
try
{
//下载基础数据
Common.PosControl.DataTransByPB.CashierDataDownload();
//上传本地数据
Common.PosControl.DataTransByPB.CashierDataUpload();
}
catch (Exception ex)
{
ESSupport.Lib.LogHelper.WriteServiceLog($"PB传输检测程序启动失败。原因{ex.Message}");
}
})
{
IsBackground = true
};
Common.PosControl.DataTransThread.Start();
}
#endregion
}
}
catch { }
#endregion
}
#endregion
#region
/// <summary>
/// 数据下载执行结果上报
/// </summary>
/// <param name="triggerTime">操作时间</param>
/// <param name="notifyMessage">消息内容</param>
/// <param name="tableName">消息类型</param>
private void PosDataDownload_NotifyEvent(object sender, ESSupport.Model.Common.NotifyEventArgs e)
{
//记录到本地文本日志
if (string.IsNullOrWhiteSpace(e.NotifyLoggerMessage))
ESSupport.Lib.LogHelper.WriteServiceLog(e.NotifyLoggerMessage);
}
#endregion
#region
/// <summary>
/// 数据上传执行结果上报
/// </summary>
/// <param name="triggerTime">操作时间</param>
/// <param name="notifyMessage">消息内容</param>
/// <param name="tableName">消息类型</param>
private void DataUpload_NotifyEvent(object sender, ESSupport.Model.Common.NotifyEventArgs e)
{
//记录到本地文本日志
if (string.IsNullOrWhiteSpace(e.NotifyLoggerMessage))
ESSupport.Lib.LogHelper.WriteServiceLog(e.NotifyLoggerMessage);
}
#endregion
#region ->
/// <summary>
/// 指令执行结果上报
/// </summary>
/// <param name="triggerTime">操作时间</param>
/// <param name="notifyMessage">消息内容</param>
/// <param name="tableName">消息类型</param>
private void PosSocket_NotifyEvent(object sender, ESSupport.Model.Common.NotifyEventArgs e)
{
//记录到本地文本日志
if (string.IsNullOrWhiteSpace(e.NotifyLoggerMessage))
ESSupport.Lib.LogHelper.WriteServiceLog(e.NotifyLoggerMessage);
}
#endregion
#region ->
/// <summary>
/// 主定时器运行事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void WorkerTimer_Tick(object sender, EventArgs e)
{
//每分钟检查一次Socket客户端是否正常连接
if (Common.PosControl.PosSocket != null && !Common.PosControl.PosSocket.ClientRuning)
{
Common.PosControl.PosSocket.Start();
}
#region
//初始化移动支付交易检测接口地址
if (string.IsNullOrWhiteSpace(PayServiceUrl))
{
PayServiceUrl = $"http://{ESSupport.Pos.PosConfigInit.ServerIP}:" +
$"{ESSupport.Pos.PosConfigInit.ConfigurationValues("service_port", "7080")}/Service.asmx";
}
#endregion
#region 线5
//启动运行日志记录线程
if (ESSupport.Common.PosControl.RuningLogThread == null ||
!ESSupport.Common.PosControl.RuningLogThread.IsAlive)
{
ESSupport.Common.PosControl.RuningLogThread = new Thread(() =>
{
if (ESSupport.Pos.ThreadHelper.RuningLog(ESSupport.Common.PosControl.RuningTime))
{
ESSupport.Common.PosControl.RuningTime = DateTime.Now;
}
})
{
IsBackground = true
};
ESSupport.Common.PosControl.RuningLogThread.Start();
}
#endregion
#region 10线
//定时启动移动支付交易校验线程
if (DateTime.Now > ESSupport.Common.PosControl.MobilePayCheckTime)
{
#region 10
if (Common.PosControl.DataTransThread == null || !Common.PosControl.DataTransThread.IsAlive)
{
Common.PosControl.DataTransThread = new Thread(() =>
{
try
{
if (ESSupport.Pos.PosConfigInit.ConfigurationValues("NewSystem", "1") == "0")
{
Common.PosControl.DataTransByPB.CreateIntervalDataZipFile();
}
}
catch { }
})
{
IsBackground = true
};
Common.PosControl.DataTransThread.Start();
}
#endregion
if (ESSupport.Common.PosControl.MobilePayCheckThread == null ||
!ESSupport.Common.PosControl.MobilePayCheckThread.IsAlive)
{
ESSupport.Common.PosControl.MobilePayCheckThread = new Thread(() =>
{
if (Common.PosControl.DataTransByPB != null)
{
//对待确认的移动支付交易进行交易结果查询
_ = ESSupport.Pos.ThreadHelper.MobilePayQueryCheck(DateTime.Today.AddMinutes(-10), DateTime.Now.AddMinutes(-5));
//补全时间范围内未确认的移动支付流水
_ = Common.PosControl.DataTransByPB.MobilePaySellCheck(DateTime.Today.AddMinutes(-10), DateTime.Now.AddMinutes(-5));
}
})
{
IsBackground = true
};
ESSupport.Common.PosControl.MobilePayCheckThread.Start();
}
//每隔5分钟执行一次移动支付交易验证
ESSupport.Common.PosControl.MobilePayCheckTime = DateTime.Now.AddMinutes(10);
}
#endregion
#region PB系统每分钟启动一次状态反馈线
//定时启动状态反馈线程
if (DateTime.Now > ESSupport.Common.PosControl.StateFeedBackTime)
{
if (ESSupport.Common.PosControl.StateFeedbackThread == null ||
!ESSupport.Common.PosControl.StateFeedbackThread.IsAlive)
{
if (ESSupport.Pos.PosConfigInit.ConfigurationValues("NewSystem", "1") == "0")
{
ESSupport.Common.PosControl.StateFeedbackThread = new Thread(() =>
{
if (DataUpload == null)
{
string str_ServerIP = Common.PosControl.IsCloudURL ? "pos.eshangtech.com" : ESSupport.Pos.PosConfigInit.ServerIP;
//内网模式下通过本地服务器Nginx代理访问云端接口
DataUpload = new ESSupport.Transfer.PosDataUpload(ESSupport.Pos.PosConfigInit.ServerpartCode,
ESSupport.Pos.PosConfigInit.ShopCode, ESSupport.Pos.PosConfigInit.MachineCode, $"http://{str_ServerIP}:7198/webApi_publish");
//绑定消息回调监听事件
DataUpload.NotifyEvent += DataUpload_NotifyEvent;
}
DataUpload.DataUpload(ESSupport.Transfer.TableDataType.RecordStateFeedBack, DateTime.Now);
})
{
IsBackground = true
};
ESSupport.Common.PosControl.StateFeedbackThread.Start();
}
ESSupport.Common.PosControl.StateFeedBackTime = DateTime.Now.AddMinutes(1);
}
}
#endregion
#region 30线
//每隔30分钟运行一次收银机基础信息更新检测线程
if (DateTime.Now > ESSupport.Common.PosControl.BaseInfoFeedbackTime)
{
if (ESSupport.Common.PosControl.BaseInfoFeedbackThread == null ||
!ESSupport.Common.PosControl.BaseInfoFeedbackThread.IsAlive)
{
ESSupport.Common.PosControl.BaseInfoFeedbackThread = new Thread(() =>
{
if (ESSupport.Pos.PosConfigInit.ConfigurationValues("NewSystem", "1") == "0")
{
//半小时记录一次软件版本
ESSupport.Lib.LogHelper.WriteServiceLog($"PB收银系统当前软件版本【{ESSupport.Pos.PosConfigInit.PosVersion}】");
//数据传输异常日志检测校验
Common.PosControl.DataTransByPB.BusinessLogCheck();
//上传本地数据
Common.PosControl.DataTransByPB.CashierDataUpload();
//上传半小时营收趋势
DataUpload.DataUpload(ESSupport.Transfer.TableDataType.RecordRevenueTrend, DateTime.Now);
//半小时上传最新日志
PosDataDownload.DataDownload(ESSupport.Transfer.TableDataType.UploadSystemLog, DateTime.Now);
//半小时刷新一次商品资质到期数据
PosDataDownload.DataDownload(ESSupport.Transfer.TableDataType.GetCommodityTempList, DateTime.Now);
Common.PosUpdate.UpdateCheck(ESSupport.Pos.PosConfigInit.ServerIP, "11000", ESSupport.Pos.PosConfigInit.ServerpartCode,
ESSupport.Pos.PosConfigInit.ShopCode, "", out string Ver, out string softUpdateContent);
}
////基础数据版本接口上报
//ESSupport.Pos.ThreadHelper.BaseInfoFeedbackUpload(WebServiceUrl);
////收银机器信息接口上报
//ESSupport.Pos.ThreadHelper.MachineInfoFeedbackUpload(WebServiceUrl);
try
{
//读取后台配置的更新服务地址
string _UpdateIP = ESSupport.Pos.PosConfigInit.ConfigurationValues("UpdateIP", string.Empty);
if (string.IsNullOrWhiteSpace(_UpdateIP))
{
//更新服务地址未配置时,默认同收银服务器地址
_UpdateIP = ESSupport.Pos.PosConfigInit.ConfigurationValues("server_ip", string.Empty);
}
//读取后台配置的更新服务端口默认11000
string _UpdatePort = ESSupport.Pos.PosConfigInit.ConfigurationValues("UpdatePort", "11000");
if (!string.IsNullOrWhiteSpace(_UpdateIP) && !string.IsNullOrWhiteSpace(_UpdatePort))
{
//检测更新站点是否存在,存在则更新配置文件
if (ESSupport.Lib.HttpHelper.UrlIsExist($"http://{_UpdateIP}:{_UpdatePort}/Update.asmx"))
{
//修改更新服务IP地址
if (ESSupport.Lib.ConfigHelper.GetAppConfig(AppDomain.CurrentDomain.BaseDirectory + "\\update.xml", "IP") != _UpdateIP)
{
ESSupport.Lib.ConfigHelper.UpdateAppConfig(AppDomain.CurrentDomain.BaseDirectory + "\\update.xml", "IP", _UpdateIP);
}
//修改更新服务端口
if (ESSupport.Lib.ConfigHelper.GetAppConfig(AppDomain.CurrentDomain.BaseDirectory + "\\update.xml", "Port") != _UpdatePort)
{
ESSupport.Lib.ConfigHelper.UpdateAppConfig(AppDomain.CurrentDomain.BaseDirectory + "\\update.xml", "Port", _UpdatePort);
}
}
}
//更新配置文件不存在端口号配置项时,写入默认端口
if (string.IsNullOrWhiteSpace(ESSupport.Lib.ConfigHelper.GetAppConfig(AppDomain.CurrentDomain.BaseDirectory + "\\update.xml", "Port")))
{
ESSupport.Lib.ConfigHelper.UpdateAppConfig(AppDomain.CurrentDomain.BaseDirectory + "\\update.xml", "Port", "11000");
}
}
catch { }
})
{
IsBackground = true
};
ESSupport.Common.PosControl.BaseInfoFeedbackThread.Start();
ESSupport.Common.PosControl.BaseInfoFeedbackTime = DateTime.Now.AddMinutes(30);
}
}
#endregion
}
#endregion
#region -> PB系统智能稽核平台校验记录获取线程定时器运行事件
/// <summary>
/// 平台稽核记录校验记录获取线程定时器运行事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void CheckAuditTimer_Tick(object sender, EventArgs e)
{
//初始化移动支付交易检测接口地址
if (string.IsNullOrWhiteSpace(PayServiceUrl))
{
PayServiceUrl = $"http://{ESSupport.Pos.PosConfigInit.ConfigurationValues("server_ip", string.Empty)}:" +
$"{ESSupport.Pos.PosConfigInit.ConfigurationValues("service_port", "7080")}/Service.asmx";
}
//启动平台稽核反馈结果获取线程
if (ESSupport.Common.PosControl.CheckAuditToPowerBuilderThread == null ||
!ESSupport.Common.PosControl.CheckAuditToPowerBuilderThread.IsAlive)
{
ESSupport.Common.PosControl.CheckAuditToPowerBuilderThread = new Thread(() =>
{
ESSupport.Pos.ThreadHelper.CheckAuditToPowerBuilder(PayServiceUrl);
})
{
IsBackground = true
};
ESSupport.Common.PosControl.CheckAuditToPowerBuilderThread.Start();
}
}
#endregion
#region ->
/// <summary>
/// 自动更新程序升级
/// </summary>
/// <param name="newVersion">自动更新新程序版本</param>
public static void UpdateApp(Version newVersion)
{
try
{
Version oldVersion = new Version(FileVersionInfo.GetVersionInfo(
Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "AutoUpdateEx.exe")).FileVersion);
if (oldVersion < newVersion)
{
byte[] Save = Properties.Resources.AutoUpdateEx;
FileStream fsObj = new FileStream(Path.Combine(
AppDomain.CurrentDomain.BaseDirectory, "AutoUpdateEx.exe"), FileMode.Create);
fsObj.Write(Save, 0, Save.Length);
fsObj.Close();
}
}
catch { }
}
#endregion
}
}