C#启动外部程序的问题

360影视 2025-02-07 19:26 2

摘要:IT&OT的深度融合是智能制造的基石。本公众号将聚焦于PLC编程与上位机开发。除理论知识外,也会结合我们团队在开发过程中遇到的具体问题介绍一些项目经验。

IT&OT的深度融合是智能制造的基石。本公众号将聚焦于PLC编程与上位机开发。除理论知识外,也会结合我们团队在开发过程中遇到的具体问题介绍一些项目经验。

在使用C#开发上位机时,有时会需要启动外部的一些第三方程序。一般我们会使用下面代码。

privatevoid button1_Click(object sender, EventArgs e){ProcessStartInfo str = new ProcessStartInfo{FileName = "notepad.exe",Arguments = @"D:\test.txt"};// 启动程序Process.Start(str);}

该代码是启动系统的记事本程序,并打开指定的文本文件。在大部分情况下这个代码是没问题的。但是当用这个代码启动我们的web server时就出问题了。表现为部分文件无法加载,比如资源文件。导致浏览器中显示的页面极其怪异。但是用鼠标双击启动就正常。后来查了下这个ProcessStartInfo类,发现该类还有一个UseShellExecute属性,将此属性设置为false后,再测试就正常了。

属性UseShellExecute用于设置外部程序的启动方式。如果设置为true表示通过Windows shell运行该程序。当程序在新的进程环境中运行时,可能会导致和其他文件、程序处于不同的上下文环境,从而无法正确加载文件及运行程序。如果设置为false,程序将通过系统的底层API创建进程,保证了上下文环境一致。需要注意的是,在.Net Framework框架中,该属性默认为true。而在.Net Core框架中,该属性默认为false。修改后的代码如下。

private void button1_Click(object sender, EventArgs e){ProcessStartInfo str = new ProcessStartInfo{FileName = "WebServer.exe",UseShellExecute= false,};// 启动程序Process.Start(str);}

来源:小隐说科技

相关推荐