C# 进程和可执行文件名

C# 进程和可执行文件名,c#,process,executable,C#,Process,Executable,C#进程类允许您在Windows中运行命令行可执行文件。Process.StartInfo类保存有关要运行的命令行作业的信息,包括其路径和文件名 我的问题是,如果文件不存在,Process.Start()将抛出异常。为了避免出现异常,我编写了一个检查代码,以查看该文件是否存在,但这并不能在所有情况下正常工作,因为名称可能不作为具有该确切名称的文件存在,但可能具有可执行副本。例如,“C:\SoAndSo”可能不作为文件存在,但“C:\SoAndSo*.exe*”作为文件存在,并且在启动Proces

C#进程类允许您在Windows中运行命令行可执行文件。Process.StartInfo类保存有关要运行的命令行作业的信息,包括其路径和文件名

我的问题是,如果文件不存在,Process.Start()将抛出异常。为了避免出现异常,我编写了一个检查代码,以查看该文件是否存在,但这并不能在所有情况下正常工作,因为名称可能不作为具有该确切名称的文件存在,但可能具有可执行副本。例如,“C:\SoAndSo”可能不作为文件存在,但“C:\SoAndSo*.exe*”作为文件存在,并且在启动Process命令时会成功找到

我已经黑了我的支票,尝试给我的名字,名字+“.exe”和“.bat”,但这感觉很模糊,也许我错过了其他可执行扩展


因此:是否有命令可以问这样一个问题:“您是否有以“SoAndSo”开头的文件名的可执行版本?”id也有类似的要求我使用环境变量
%PATHEXT%
解决了这个问题

可以找到参考资料, 假设我正在尝试查找一个名为abcd的程序,那么应用程序将查找该程序

*abc*
以及
%PATHEXT%
变量中可用的所有扩展组合


我认为这是一个粗糙的实现。。但这对我很管用。。我我很确定有更好的方法可以做到这一点。

为什么不尝试启动流程并将其包装在try/catch中,当您收到FileNotFoundException时,您可以简单地打印该流程的输出并退出?我知道您希望尝试避免出现异常,但尝试防止异常的开销可能比引发异常的开销更大。

如果您使用的是GUI,您可以使用默认的.bat和.exe过滤器,并允许它们选择
所有文件(*.*)
。是的,我确实在尝试避免依赖异常。我同意你的观点,这是一种平衡。。。然而,我并没有放弃可能做一些更整洁的事情的希望!我相信这是最整洁的方法。引发异常并不是那么昂贵,我很确定检查目录中的文件是否匹配之类的费用会更高。总的来说,我同意您的方法是实用的,而且开销可能会更小。。。这个问题的精神是关于测试和避免异常,所以你的答案被Anantha的文章抢到了。不过,谢谢你的想法。尽管与你的回答相比,耶稣·拉莫斯的实用主义与你的回答相差无几,阿南塔,但我接受这个回答,因为它稍微接近我的预期结果;这是为了避免异常,而不是理解系统将考虑什么可执行的扩展。非常感谢!