在c#中调用另一个应用程序或命令行(.exe 带参数)

简介:

在.net中使用system.diaglostics.Process可以用来调用另一个命令行或程序。

using   System.Diagnostics;  
 如果是dos  
 Process.Start("cmd.exe");  
 如果是其他文件  
 Process.Start("绝对路径+文件名.exe");  
 ------------------------------------  
 如何在c#中调用外部dos程序?  
 使用Process对象:      
 System.Diagnostics.Process     p=new     System.Diagnostics.Process();      
 p.StartInfo.FileName="arj.exe"     ;//需要启动的程序名      
 p.StartInfo.Arguments="-x     sourceFile.Arj     c:\temp";//启动参数      
 p.Start();//启动      
 if(p.HasExisted)//判断是否运行结束      
   p.kill();  



-------------------------------------------------------------------------------------------------------------------------------------
///      
 ///   启动其他的应用程序  
 ///    

 ///   应用程序名称  
 ///   应用程序工作目录  
 ///   命令行参数  
 ///   窗口风格  
 public   static   bool   StartProcess(string   file,string   workdirectory,string   args,ProcessWindowStyle   style)  
 {  
 try  
 {  
 Process   myprocess   =   new   Process();  
 ProcessStartInfo   startInfo   =   new   ProcessStartInfo(file,args);  
 startInfo.WindowStyle   =   style;  
 startInfo.WorkingDirectory   =   workdirectory;  
 myprocess.StartInfo   =   startInfo;  
 myprocess.StartInfo.UseShellExecute   =   false;  
 myprocess.Start();  
 return   true;  
 }  
 catch(Exception   e0)  
 {  
 MessageBox.Show("启动应用程序时出错!原因:"   +   e0.Message);  
 }  
 return   false;  
 }  
   
   
   
 string   parms   =   ""   +   GlobalObject.GetInstance().UserID   +   "   "   +   GlobalObject.GetInstance().UserPassword;  
 if   (PublicMethods.StartProcess(Application.StartupPath   +   @"\uptool\uptool.exe",Application.StartupPath   +   "\\UpTool",parms,ProcessWindowStyle.Normal))  
 {  
 Environment.Exit(0);  
 }  
----------------------------------------------------------------------------------------------------------------------
Process.Start("IExplore.exe",   "[url]http://www.newhappy.cn[/url]");  
System.Diagnostics.ProcessStartInfo   startInfo   =   new   System.Diagnostics.ProcessStartInfo(   );  
 startInfo.FileName   =   "执行EXE的文件名";  
 startInfo.Arguments   =   "参数数组";  
 System.Diagnostics.Process.Start(   startInfo   );
----------------------------------------------------------------------------------------------------------------------------
1.有好多时,我们需要调用外部的EXE程序,并且要等它运行完毕,我们才可以继续下面的动作,那我们怎样去实现了,请看以下代码.
       '怎样等待外部程序运行完毕.
       '从系统资料夹读入文件
       Dim sysFolder As String = _
                   Environment.GetFoldERPath(Environment.SpecialFolder.System)
       '创建一个新的进程结构
       Dim pInfo As New ProcessStartInfo()
       '设置其成员FileName为系统资料的Eula.txt
       pInfo.FileName = sysFolder & "\eula.txt"
       '运行该文件
       Dim p As Process = Process.Start(pInfo)
       '等待程序装载完成
       p.WaitForInputIdle()
       '等待进行程退出
       p.WaitForExit()
       '继续执行下面的代码
       MessageBox.Show("继续执行代码")


2.我们想在5秒钟后,强行关闭它.而不是需要我手工关闭.
   '设置退出时间
   Dim timeOut As Integer = 5000
   Dim sysFolder As String = _
        Environment.GetFolderPath(Environment.SpecialFolder.System)
   Dim pInfo As New ProcessStartInfo()
   pInfo.FileName = sysFolder & "\eula.txt"
   Dim p As Process = Process.Start(pInfo)
   p.WaitForInputIdle()
   p.WaitForExit(timeOut)
   '检查是否在超时前已关闭了.
   If p.HasExited = False Then
       '进行程还在运行
       '看进程有没有回应
       If p.Responding Then
           p.CloseMainWindow() '关闭窗口
       Else
           p.Kill()  '强行中断
       End If
   End If
   MessageBox.Show("继续执行代码")










本文转自 牛海彬 51CTO博客,原文链接:http://blog.51cto.com/newhappy/135705,如需转载请自行联系原作者

目录
相关文章
|
缓存 C# Windows
C#程序如何编译成Native代码
【10月更文挑战第15天】在C#中,可以通过.NET Native和第三方工具(如Ngen.exe)将程序编译成Native代码,以提升性能和启动速度。.NET Native适用于UWP应用,而Ngen.exe则通过预编译托管程序集为本地机器代码来加速启动。不过,这些方法也可能增加编译时间和部署复杂度。
847 2
|
9月前
|
存储 SQL 数据库连接
C#程序调用Sql Server存储过程异常处理:调用存储过程后不返回、不抛异常的解决方案
本文分析了C#程序操作Sql Server数据库时偶发的不返回、不抛异常问题,并提出了解决思路。首先解析了一个执行存储过程的函数`ExecuteProcedure`,其功能是调用存储过程并返回影响行数。针对代码执行被阻塞但无异常的情况,文章总结了可能原因,如死锁、无限循环或网络问题等。随后提供了多种解决方案:1) 增加日志定位问题;2) 使用异步操作提升响应性;3) 设置超时机制避免阻塞;4) 利用线程池分离主线程;5) 通过信号量同步线程;6) 监控数据库连接状态确保可用性。这些方法可有效应对数据库操作中的潜在问题,保障程序稳定性。
726 11
|
9月前
|
存储 监控 算法
基于 C# 时间轮算法的控制局域网上网时间与实践应用
在数字化办公与教育环境中,局域网作为内部网络通信的核心基础设施,其精细化管理水平直接影响网络资源的合理配置与使用效能。对局域网用户上网时间的有效管控,已成为企业、教育机构等组织的重要管理需求。这一需求不仅旨在提升员工工作效率、规范学生网络使用行为,更是优化网络带宽资源分配的关键举措。时间轮算法作为一种经典的定时任务管理机制,在局域网用户上网时间管控场景中展现出显著的技术优势。本文将系统阐述时间轮算法的核心原理,并基于 C# 编程语言提供具体实现方案,以期深入剖析该算法在局域网管理中的应用逻辑与实践价值。
244 5
|
JSON C# 数据格式
【Azure Function】C#独立工作模式下参数类型 ServiceBusReceivedMessage 无法正常工作
Cannot convert input parameter 'message' to type 'Azure.Messaging.ServiceBus.ServiceBusReceivedMessage' from type 'System.String'.
272 73
|
算法 Java 测试技术
Benchmark.NET:让 C# 测试程序性能变得既酷又简单
Benchmark.NET是一款专为 .NET 平台设计的性能基准测试框架,它可以帮助你测量代码的执行时间、内存使用情况等性能指标。它就像是你代码的 "健身教练",帮助你找到瓶颈,优化性能,让你的应用跑得更快、更稳!希望这个小教程能让你在追求高性能的路上越走越远,享受编程带来的无限乐趣!
861 13
|
存储 安全 物联网
C# 在物联网 (IoT) 应用中的应用
本文介绍了C#在物联网(IoT)应用中的应用,涵盖基础概念、优势、常见问题及其解决方法。重点讨论了网络通信、数据处理和安全问题,并提供了相应的代码示例,旨在帮助开发者更好地利用C#进行IoT开发。
661 3
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
216 3
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
346 2
|
C# Windows
C#实现指南:将文件夹与exe合并为一个exe
C#实现指南:将文件夹与exe合并为一个exe
1190 9
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
273 0