C# WinForm 开发配置文件更新/EXE应用启动及监控检测工具

简介: 使用C# WinForm 开发快速更新配置文件切换环境以及启动外部EXE应用并进行监控的windows桌面EXE应用

一、背景

数字驾驶舱大屏采用UE4(Unreal Engine 4)作为基座(C/S架构),负责渲染三维城市模型以及数据指标,以及对接其他业务系统应用。

目前打包后的文件大小压缩后1.2GB,解压后默认8GB,在部署时碰到的问题如下:

  1. 无法同时打包不同环境的包,所以需要更新配置信息来切换不同环境。
  2. 其次启动驾驶舱目前依赖的外部应用比较多,本地NGINX(开启本地缓存较大的静态文件),宇视WebPlayer.exe(摄像头视频播放插件),HW CloudLink桌面端(视频会商),华为视频会商js sdk(指挥调度-单兵连线),X-Screen.exe(搭配UE,实现应用上屏)。
  3. 最后就是部分程序会中途退出。

基于以上几点问题,有了小工具的诞生,主要希望解决的痛点是能有个快速更新配置文件切换环境以及启动外部EXE应用并进行监控的windows桌面应用。在大学课程当中有接触过C#,了解到开发也比较简单(工具箱里有现成的组件),同时康宁大佬也给过建议,最后选择用C#的WinForm进行开发。


二、配置更新演变历程

1、手动替换

手动文本编辑器打开配置文件Ctrl + F查找替换;

2、脚本替换

shell脚本更新配置文件内容替换配置更新(不支持来回切换|windows默认无法执行);

sed-i"s#$origin#$target#g" 文件名.txt

3、小工具替换

3.1 驾驶舱小工具V1.0

支持环境自由切换/手动启动外部应用/配置应用地址(目录受限制)

3.1.1 配置更新

// 打开一个文本文件,将文件中的所有文本读取到一个字符串中,然后关闭此文件stringtext=File.ReadAllText(absolutePath);
text=text.Replace(origin, target);
// 创建一个新文件,向其中写入内容,然后关闭文件。 如果目标文件已存在,则覆盖该文件。File.WriteAllText(absolutePath, text);

3.1.2 启动EXE应用(ProcessStartInfo启动)

ProcessStartInfoinfo=newProcessStartInfo();             
info.FileName=@"路径\exe的文件名";              
info.Arguments="";              
info.WindowStyle=ProcessWindowStyle.Minimized;             
Processpro=Process.Start(info);              
pro.WaitForExit();

3.2 驾驶舱小工具V1.1

工具目录不受限制/开启应用监控(守护进程)

3.2.1 启动外部应用(ShellExecute)

//class里面放入这段代码[DllImport("shell32.dll")]
publicstaticexternintShellExecute(IntPtrhwnd, StringBuilderlpszOp, StringBuilderlpszFile, StringBuilderlpszParams, StringBuilderlpszDir, intFsShowCmd);
//需要打开的地方插入此段代码ShellExecute(IntPtr.Zero, newStringBuilder("Open"), newStringBuilder("test.exe"), newStringBuilder(""), newStringBuilder(@"C:\文件夹名"), 1);

三、小工具开发遇到的问题

1、环境来回自由切换

问题原因:

驾驶舱目前UE与WEB是用socket消息进行通信,不同用户需要进行分组区分,否则消息混乱导致大屏交互出现类似"鬼触屏",和预期交互不一致.分组目前是固定前缀加上时间戳。

解决方案:

利用目前的配置文件App.config存储当前的生成的分组名,方便下次配置更新进行替换

<?xmlversion="1.0" encoding="utf-8" ?><configuration><appSettings><!--应用程序位置配置--><addkey="yysp"value="C:\Users\admin\Desktop\x-screen-dist-diy\x-screen.exe"/><addkey="zyhc"value="C:\Users\admin\Desktop\nginx-1.18.0\nginx.exe"/><addkey="spbf"value="C:\Surveillance\WEBPlayer\WEBPlayer.exe"/><addkey="sphs"value="C:\Program Files (x86)\HW CloudLink\HW CloudLink.exe"/><addkey="zhdd"value="C:\Program Files (x86)\HW CloudLink\CloudLinkKitDaemon.exe"/><addkey="szjsc"value ="C:\Users\admin\Desktop\FSNH20211202\WindowsNoEditor\FoShan_CityofBrain2.exe"/><!--守护进程--><addkey="serviceProcess"value="yysp,zyhc,spbf,sphs,zhdd"/><addkey="logPath"value="D:\ProcessMonitorLog"/><!--文件替换配置--><addkey ="currentPath"value="TVLibraryProjectSettings.ini"/><addkey ="originPath"value="FoShan_CityofBrain2\Saved\Config\WindowsNoEditor\TVLibraryProjectSettings.ini"/><!--文件内容替换配置--><addkey ="ipconfig"value="FoShan_CityofBrain2/Config/TVConfig/IPconfig.json"/><addkey ="pointConfig"value="FoShan_CityofBrain2/Config/TVConfig/PointConfig.json"/><addkey ="shuBiaoconfig"value="FoShan_CityofBrain2/Config/TVConfig/ShuBiaoconfig.json"/><addkey ="tvLibraryProjectSettings"value="FoShan_CityofBrain2/Saved/Config/WindowsNoEditor/TVLibraryProjectSettings.ini"/><addkey ="proxToolConfig"value="FoShan_CityofBrain2/Plugins/TVDaemon/Extras/ProxyTool/config.js"/><!--socket配置--><!--前端配置--><!--后台配置--><!--分组配置--><addkey ="groupA"value="TheiaGroup"/><addkey ="groupB"value="wujiegroup"/><addkey ="currentGroup"value="USER20211112182241"/><addkey ="groupPrefix"value="USER"/></appSettings></configuration>

2、启动外部应用与手动双击效果不一致

问题原因:

X-Screen中有使用第三方软件或系统插件

解决方案:

尝试更换启动外部应用打开方式解决,经测试ShellExecute启动与手动启动效果一致

3、应用关闭进程依然保留任务管理器

问题原因:

       开启了守护进程(非主线程),导致无法彻底关闭

解决方案:

重写应用关闭方法并使用 Process.GetCurrentProcess().Kill();


参考资料:

sed -i命令:https://blog.csdn.net/qq_33468857/article/details/84324609

System.IO.File API:https://docs.microsoft.com/zh-cn/dotnet/api/system.io.file.appendalllines?view=net-6.0

C# winform 启动外部程序:https://www.cnblogs.com/zhujiantao/p/6694446.html

ShellExecute 函数:https://baike.baidu.com/item/Shellexecute/5788449

C# 退出应用程序:https://www.cnblogs.com/mq0036/p/11074325.html





相关文章
|
2月前
|
存储 监控 算法
电脑监控管理中的 C# 哈希表进程资源索引算法
哈希表凭借O(1)查询效率、动态增删性能及低内存开销,适配电脑监控系统对进程资源数据的实时索引需求。通过定制哈希函数与链地址法冲突解决,实现高效进程状态追踪与异常预警。
188 10
|
3月前
|
XML 测试技术 API
利用C#开发ONVIF客户端和集成RTSP播放功能
利用C#开发ONVIF客户端和集成RTSP播放功能
1594 123
|
2月前
|
存储 机器学习/深度学习 监控
网络管理监控软件的 C# 区间树性能阈值查询算法
针对网络管理监控软件的高效区间查询需求,本文提出基于区间树的优化方案。传统线性遍历效率低,10万条数据查询超800ms,难以满足实时性要求。区间树以平衡二叉搜索树结构,结合节点最大值剪枝策略,将查询复杂度从O(N)降至O(logN+K),显著提升性能。通过C#实现,支持按指标类型分组建树、增量插入与多维度联合查询,在10万记录下查询耗时仅约2.8ms,内存占用降低35%。测试表明,该方案有效解决高负载场景下的响应延迟问题,助力管理员快速定位异常设备,提升运维效率与系统稳定性。
227 4
|
4月前
|
存储 机器学习/深度学习 监控
公司监控软件有哪些?监测方案:基于布隆过滤器的 C# 异常行为检测实践探索
本文探讨了布隆过滤器在公司监控软件中的技术应用,介绍其原理、优势及C#实现代码,助力企业高效构建数据安全防护体系。
144 0
|
6月前
|
监控 算法 安全
公司电脑监控软件关键技术探析:C# 环形缓冲区算法的理论与实践
环形缓冲区(Ring Buffer)是企业信息安全管理中电脑监控系统设计的核心数据结构,适用于高并发、高速率与短时有效的多源异构数据处理场景。其通过固定大小的连续内存空间实现闭环存储,具备内存优化、操作高效、数据时效管理和并发支持等优势。文章以C#语言为例,展示了线程安全的环形缓冲区实现,并结合URL访问记录监控应用场景,分析了其在流量削峰、关键数据保护和高性能处理中的适配性。该结构在日志捕获和事件缓冲中表现出色,对提升监控系统效能具有重要价值。
187 1
|
10月前
|
物联网 数据处理 C#
C#实现上位机开发,串口通信,读写串口数据并处理16进制数据
C#实现上位机开发,串口通信,读写串口数据并处理16进制数据。在自动化、物联网以及工业控制行业中,上位机开发是一项重要的技能。本教程主要介绍使用C#进行上位机开发,重点在于串口通信和数据处理。
2026 82
|
7月前
|
存储 监控 算法
局域网上网记录监控的 C# 基数树算法高效检索方案研究
在企业网络管理与信息安全领域,局域网上网记录监控是维护网络安全、规范网络行为的关键举措。随着企业网络数据量呈指数级增长,如何高效存储和检索上网记录数据成为亟待解决的核心问题。基数树(Trie 树)作为一种独特的数据结构,凭借其在字符串处理方面的卓越性能,为局域网上网记录监控提供了创新的解决方案。本文将深入剖析基数树算法的原理,并通过 C# 语言实现的代码示例,阐述其在局域网上网记录监控场景中的具体应用。
182 7
|
7月前
|
存储 监控 算法
基于 C# 时间轮算法的控制局域网上网时间与实践应用
在数字化办公与教育环境中,局域网作为内部网络通信的核心基础设施,其精细化管理水平直接影响网络资源的合理配置与使用效能。对局域网用户上网时间的有效管控,已成为企业、教育机构等组织的重要管理需求。这一需求不仅旨在提升员工工作效率、规范学生网络使用行为,更是优化网络带宽资源分配的关键举措。时间轮算法作为一种经典的定时任务管理机制,在局域网用户上网时间管控场景中展现出显著的技术优势。本文将系统阐述时间轮算法的核心原理,并基于 C# 编程语言提供具体实现方案,以期深入剖析该算法在局域网管理中的应用逻辑与实践价值。
201 5
|
9月前
|
存储 监控 算法
员工电脑监控系统中的 C# 链表算法剖析-如何监控员工的电脑
当代企业管理体系中,员工电脑监控已成为一个具有重要研究价值与实践意义的关键议题。随着数字化办公模式的广泛普及,企业亟需确保员工对公司资源的合理利用,维护网络安全环境,并提升整体工作效率。有效的电脑监控手段对于企业实现这些目标具有不可忽视的作用,而这一过程离不开精妙的数据结构与算法作为技术支撑。本文旨在深入探究链表(Linked List)这一经典数据结构在员工电脑监控场景中的具体应用,并通过 C# 编程语言给出详尽的代码实现与解析。
194 5
|
8月前
|
SQL 小程序 API
如何运用C#.NET技术快速开发一套掌上医院系统?
本方案基于C#.NET技术快速构建掌上医院系统,结合模块化开发理念与医院信息化需求。核心功能涵盖用户端的预约挂号、在线问诊、报告查询等,以及管理端的排班管理和数据统计。采用.NET Core Web API与uni-app实现前后端分离,支持跨平台小程序开发。数据库选用SQL Server 2012,并通过读写分离与索引优化提升性能。部署方案包括Windows Server与负载均衡设计,确保高可用性。同时针对API差异、数据库老化及高并发等问题制定应对措施,保障系统稳定运行。推荐使用Postman、Redgate等工具辅助开发,提升效率与质量。
334 0

热门文章

最新文章