From f317709fbc7de95fa2e1b7f41d01c85a7fec8238 Mon Sep 17 00:00:00 2001
From: zs <zhousong@weben-smart.com>
Date: 周四, 21 11月 2024 10:50:06 +0800
Subject: [PATCH] 注册表方式启动

---
 DataCapture_MA/Form1.cs |  109 ++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 104 insertions(+), 5 deletions(-)

diff --git a/DataCapture_MA/Form1.cs b/DataCapture_MA/Form1.cs
index 9a7579b..f6a8d4a 100644
--- a/DataCapture_MA/Form1.cs
+++ b/DataCapture_MA/Form1.cs
@@ -15,11 +15,15 @@
 using DataCapture_MA.Entity;
 using DataCapture_MA.DataHnadle;
 using DataCapture_MA.AutoMapperConfig;
+using System.IO;
+using IWshRuntimeLibrary;
+using Microsoft.Win32;
 
 namespace DataCapture_MA
 {
     public partial class CaptrueForm : Form
     {
+        private CancellationTokenSource _cts = new CancellationTokenSource();
         bool RunningFlag = false;
         Socket skt = WZ.Useful.Commons.NetworkUtil.CreateUdpSocket();
         EndPoint RemotePoint = null;
@@ -27,25 +31,116 @@
         public CaptrueForm()
         {
             InitializeComponent();
+
             var hostName = Dns.GetHostName();
             var ips = Dns.GetHostAddresses(hostName);
+            string targetSubnet = "10.133.13"; // 鐩爣缃戞
+
+            bool foundTargetSubnet = false;
+
             foreach (var ip in ips)
             {
                 if (ip.AddressFamily == AddressFamily.InterNetwork) // 鍙樉绀篒Pv4鍦板潃
                 {
                     ipSelect.Items.Add(ip);
+                    // 妫�鏌ユ槸鍚﹀寘鍚洰鏍囩綉娈�
+                    if (ip.ToString().StartsWith(targetSubnet))
+                    {
+                        ipSelect.SelectedItem = ip; // 閫変腑鍖归厤鐨� IP
+                        foundTargetSubnet = true;
+                    }
                 }
             }
-            ipSelect.SelectedIndex = 0;
-            to_ipTxt.Text = ipSelect.SelectedItem.ToString();
-            AutoMapper.Mapper.Initialize((cfg) => {
+
+            if (!foundTargetSubnet && ipSelect.Items.Count > 0)
+            {
+                //MessageBox.Show($"鏈壘鍒扮綉娈典负 {targetSubnet} 鐨処P鍦板潃锛屽皢榛樿閫変腑绗竴涓狪P銆�", "鎻愮ず", MessageBoxButtons.OK, MessageBoxIcon.Information);
+                ipSelect.SelectedIndex = 0;
+            }
+            to_ipTxt.Text = ipSelect.SelectedItem?.ToString();
+
+            // 鍒濆鍖� AutoMapper
+            AutoMapper.Mapper.Initialize(cfg =>
+            {
                 cfg.AddProfile<MapperConfiguration>();
             });
 
+            ////鍒涘缓蹇嵎鏂瑰紡
+            //string shortcutName = "MaDataCapture"; // 蹇嵎鏂瑰紡鍚嶇О
+            //string targetPath = Application.ExecutablePath; // 绋嬪簭璺緞
+            //string startupPath = Environment.GetFolderPath(Environment.SpecialFolder.Startup); // 鍚姩鏂囦欢澶硅矾寰�
+            //CreateShortcut(shortcutName, targetPath, startupPath); // 鍒涘缓蹇嵎鏂瑰紡
+
+            SetRegistryAutoStart("MaDataCapture", Application.ExecutablePath); // 娉ㄥ唽琛ㄦ柟寮忓疄鐜拌嚜鍚姩
+
+            StartReceive(); // 鍚姩绋嬪簭
+            CreateDatabase();  // 鍒濆鍖栨暟鎹簱
+
+            Log4NetHelper.WriteErrorLog(LogType.Receive, "绋嬪簭鍚姩:" + DateTime.Now);
             // 鍒犻櫎涓�涓湀鍓嶇殑鏁版嵁
             new Thread(AutoDeleteHistoryDate.Handler).Start();
+
+            this.FormClosing += CaptrueForm_FormClosing;
+            this.FormClosed += CaptrueForm_FormClosed;
+        }
+        /// <summary>
+        /// 璁剧疆娉ㄥ唽琛ㄥ疄鐜拌嚜鍚姩
+        /// </summary>
+        /// <param name="appName">搴旂敤绋嬪簭鍚嶇О</param>
+        /// <param name="appPath">搴旂敤绋嬪簭璺緞</param>
+        private void SetRegistryAutoStart(string appName, string appPath)
+        {
+            try
+            {
+                // 鎵撳紑娉ㄥ唽琛ㄨ矾寰�
+                RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run", true);
+
+                if (key == null)
+                {
+                    //throw new Exception("鏃犳硶璁块棶娉ㄥ唽琛ㄨ矾寰勶紒"); 
+                    Log4NetHelper.WriteErrorLog(LogType.Receive, "鏃犳硶璁块棶娉ㄥ唽琛ㄨ矾寰�:" + DateTime.Now);
+                }
+
+                // 璁剧疆娉ㄥ唽琛ㄩ敭鍊�
+                key.SetValue(appName, appPath);
+
+                key.Close();
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show($"璁剧疆寮�鏈鸿嚜鍚姩澶辫触锛歿ex.Message}锛岃杩涜鎵嬪姩鍚姩", "閿欒", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+        private void CaptrueForm_FormClosing(object sender, FormClosingEventArgs e)
+        {
+            Log4NetHelper.WriteErrorLog(LogType.Receive, "绋嬪簭鍏抽棴:" + DateTime.Now);
+            // 閫氱煡鍚庡彴浠诲姟鍙栨秷
+            _cts.Cancel();
+
+            // 纭繚浠诲姟瀹屾垚
+            Task.WaitAll(Task.WhenAll());
         }
 
+        private void CaptrueForm_FormClosed(object sender, FormClosedEventArgs e)
+        {
+            Log4NetHelper.WriteErrorLog(LogType.Receive, "绋嬪簭閫�鍑�:" + DateTime.Now);
+            // 纭繚绋嬪簭閫�鍑�
+            Environment.Exit(0);
+        }
+
+        public static void CreateShortcut(string shortcutName, string targetPath, string startupPath)
+        {
+            string shortcutPath = Path.Combine(startupPath, shortcutName + ".lnk");
+            if (System.IO.File.Exists(shortcutPath))
+                return;
+
+            WshShell shell = new WshShell();
+            IWshShortcut shortcut = (IWshShortcut)shell.CreateShortcut(shortcutPath);
+            shortcut.TargetPath = targetPath;
+            shortcut.WorkingDirectory = Path.GetDirectoryName(targetPath);
+            shortcut.Save();
+        }
+        
         private void ReceiveHandle()
         {
             //鎺ユ敹鏁版嵁澶勭悊绾跨▼  
@@ -79,6 +174,10 @@
         }
 
         private void start_connect_Click(object sender, EventArgs e)
+        {
+            StartReceive();
+        }
+        public void StartReceive()
         {
             try
             {
@@ -114,7 +213,7 @@
 
 
                 Log4NetHelper.WriteInfoLog(LogType.Receive, "寮�鍚疷DP閫氫俊鎴愬姛" + iPEndPoint.ToString());
-                ipSelect.Enabled = false;
+                //ipSelect.Enabled = false;
                 local_port.Enabled = false;
                 to_ipTxt.Enabled = false;
                 to_portTxt.Enabled = false;
@@ -124,7 +223,7 @@
                 colse_connect.Enabled = true;
                 r_showBox.Text += "鏁版嵁鎺ユ敹宸插惎鍔╘n";
             }
-            catch(Exception ex)
+            catch (Exception ex)
             {
                 Log4NetHelper.WriteInfoLog(LogType.Receive, "寮�鍚疷DP閫氫俊澶辫触" + ex);
                 MessageBox.Show(ex.Message);

--
Gitblit v1.9.3