首页 > 编程语言 >.net 6 winform启动器:调用CMD命令行执行dotnet命令启动.net core程序并将控制台输出日志输出到winform textbox实现实时日志显示

.net 6 winform启动器:调用CMD命令行执行dotnet命令启动.net core程序并将控制台输出日志输出到winform textbox实现实时日志显示

时间:2023-07-19 11:47:30浏览次数:42  
标签:控制台 启动 程序 net 日志 winform

背景

  历史遗留问题,生产车间运行的一个.net core signalr程序使用命令行程序启动,经常由于生产人员误操作将光标停留在控制台上导致程序假死,丢失部分测试数据,车间随便找了一台win10系统部署的程序,源代码遗失,电脑也是阉割版,原开发者已经离职多年无人敢动,于是想了一个歪门邪道发方法,做一个基于winform的启动器,程序点关闭的时候托盘到右下角图标,实现右键选择退出。

原理

  1.winform选择基于.netcore的主程序dll或者exe文件,自动记录上次所选择的程序执行文件路径。

  2.选择文件为dll的时候使用Process调用系统cmd命令行,执行dontnet xxx.dll启动命令,启动程序,同时将控制台日志输出到winform的textbox。

  3.托盘程序,点击关闭按钮托盘到右下角图标,托盘图标右键选择退出。

  4.程序退出必须先结束运行的程序,经观察发现,此方式启动会通过命令行启动dotnet host,若不先结束运行的程序,关闭winform后有进程遗留在系统中,导致产生端口占用,多实例运行等问题。

界面

  

实现

  1、选择文件并记录本次选择目录,采用OpenFileDialog筛选文件dll或者exe,采用程序集资源Settings.settings记录本次程序启动选择的文件路径。

  2、选择文件使用Process启动类启动命令行并执行命令,启动程序,订阅控制台日志输出事件,并将日志输出到winform的日志监控texbox

  3.NotifyIcon及ContextMenuStrip托盘程序到右下角图标

  3.结束进程,调用系统底层发送控制台命令ctrl+c释放控制台及dotnethost

 结语

  程序使用发布部署建议还是以常用方式托管及部署,歪门邪道毕竟不是正路,总可能发生不必要的麻烦哦!

转载及复制本文请注明出处!

 

 

  

 

  

标签:控制台,启动,程序,net,日志,winform
From: https://www.cnblogs.com/flykai/p/17565164.html

相关文章

  • (四)Kubernetes部署storm后的kill命令找不到的问题
    使用Kubernetes部署storm集群后,发现Supervisor在运行过程中不断重启,十分奇怪。因此新开一个窗口追踪Supervisor的日志supervisor.log。最终发现每次storm在rebalance的时候,Supervisor需要kill掉本节点上的进程。但由于storm:1.2.2中的kill命令是一个shell内置命令,导致Supervisor......
  • Visual Studio 2022 .NET 7读取程序集版本
    如果你也像我一样是从.NetFramwork升级到.Net7版本,那大概率会碰到不能正常读取Assembly下的正确程序集版本号,利用asm.GetName().Version读到的是0.0.0.0,解决方法是新建一个项目,并将“AssemblyInfo.cs”复制到你的项目下Properties内。一些产品名称、公司信息等自行修改,Guid可......
  • .net 事务(_dbContext、Database)
     //开启事务vartran=_dbContext.Database.BeginTransaction();try{ _dbContext.SaveChanges();//提交事务tran.Commit();}catch(Exceptionex){......
  • .net 通过反射导出excel
    ///<summary>///详细报表生成excel列名///</summary>privatestaticstring_detailsCloumns=@"ActualClaimAmount,DeclDate";///<summary>///详细报表生成excel///</summary>///<par......
  • GreatSQL通过错误日志信息判断数据库实例是如何关闭的
    背景概述在一次客户的数据库实例连接不上了,需要我们排查一下原因,通过查看数据库实例进程已经不存在了,在错误日志中没有发现其他报错信息,发现有shutdown的字样出现,怀疑是某个用户手动关闭了实例。我们通过以下测试,发现是由于用户关闭了主机所导致的。问题复现本次测试基于GreatS......
  • .NET周刊【7月第3期 2023-07-16】
    国内文章揭秘.NET中的TimerQueue(上)https://www.cnblogs.com/eventhorizon/p/17557821.htmlTimerQueue是.NET中实现定时任务的核心组件,它是一个定时任务的管理器,负责存储和调度定时任务。它被用于实现很多.NET中的定时任务,比如System.Threading.Timer、Task.Delay、Cance......
  • ASP.NET 6 使用工作单元操作 MongoDB
    大家好,我是Edison。最近工作中需要用到MongoDB的事务操作,因此参考了一些资料封装了一个小的组件,提供基础的CRUDRepository基类和UnitOfWork工作单元模式。今天,就来简单介绍一下这个小组件。关于MongoDB的事务MongoDB在4.2版本开始全面支持了多文档事务,至今已过了四年了,虽然......
  • [回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
    在编程方面,从来都是实践出真知,书读百遍其义自见,所以实战是最好的提升自己编程能力的方式。前一段时间,写了一些实战系列文章,如:ASP.NETMVC开发学生信息管理系统Vue+Antdv+Asp.netWebApi开发学生信息管理系统WPF+Prism+MAH+Asp.netWebApi开发学生信息管理系统ASP.NETCore......
  • 笨方法实现unet
    importlogginglogging.basicConfig(level=logging.INFO,format='%(asctime)s-%(filename)s[line:%(lineno)d]-%(levelname)s:%(message)s',datefmt='%Y-%m-%d%H:%M:%S')importtorchimporttorch.nnas......
  • Asp.Net Core 实现异步操作锁 (SemaphoreSlim)
    /设置同时访问线程最大数量staticSemaphoreSlim_semaphore=newSemaphoreSlim(4);staticvoidAccessDatabase(stringname,intseconds){Console.WriteLine($"{name}waitstoaccessadatabase");_semaphore.Wait();Console.WriteLine($"{name}wa......