关于从C#程序调用批处理文件的建议

关于从C#程序调用批处理文件的建议,c#,batch-file,path,command,prompt,C#,Batch File,Path,Command,Prompt,我对使用C#非常陌生,目前只在工作中使用它。我目前正在编辑一个现有的应用程序,并试图添加一个函数,该函数将调用我编写的批处理文件。此批处理文件运行CLI程序,并执行一些错误级别检查,以确保程序正确执行,并向命令提示符报告任何错误。我不希望在C#中重写此函数,因为当我在没有主程序的情况下执行此任务时,此批处理文件对我很有用。但是,如果需要在C#中重写此批处理文件的函数,我将不知道如何进行 我在网上找到这段代码来运行我的批处理文件,它运行得非常好: System.Diagnostic

我对使用C#非常陌生,目前只在工作中使用它。我目前正在编辑一个现有的应用程序,并试图添加一个函数,该函数将调用我编写的批处理文件。此批处理文件运行CLI程序,并执行一些错误级别检查,以确保程序正确执行,并向命令提示符报告任何错误。我不希望在C#中重写此函数,因为当我在没有主程序的情况下执行此任务时,此批处理文件对我很有用。但是,如果需要在C#中重写此批处理文件的函数,我将不知道如何进行

我在网上找到这段代码来运行我的批处理文件,它运行得非常好:

        System.Diagnostics.Process proc = new System.Diagnostics.Process();
        proc.EnableRaisingEvents = false;
        proc.StartInfo.FileName = "C:mypath\\mybatfile.bat";
        proc.Start();
这段代码的唯一问题是,它要求我在部署应用程序之前设置此路径。我将把这个应用程序分发到其他一些机器上,并可能最终分发到更多的机器上。我真的很想找到一种方法,以某种方式将此路径链接到程序保存的位置,并将此批处理文件包含在应用程序的资源中

这一切都可能是非常离谱的,任何提供的方向都将受到极大的赞赏

我对C#和其他PC编程中使用的术语知之甚少,因为我的大部分经验都是在UController方面

编辑:我的程序是一个GUI.xaml应用程序。我还决定用C#重写批处理文件,因为批处理文件中还有一些路径我忘记了。是否有任何方法可以运行命令提示符应用程序,传递命令行参数并轻松检查错误级别

编辑2:我添加这篇文章只是为了帮助将来出现这篇文章的人。这就是我最终使用Dantix的建议解决问题的方式:

        System.Diagnostics.Process proc = new System.Diagnostics.Process();
        proc.EnableRaisingEvents = false;
        string bat_path = System.Reflection.Assembly.GetExecutingAssembly().Location; 
        proc.StartInfo.FileName = bat_path.Replace("\\myAppName.exe, "") + "\\myBatchFile.bat";
        proc.Start();

谢谢你的帮助

也许您可以使用,或者如果您的程序是控制台应用程序,您可以使用您可以使用
application.StartupPath
获取启动应用程序的可执行文件的路径,不包括可执行文件名

根据您的要求,可能是

proc.StartInfo.FileName=Application.startpath+“\\mybatfile.bat”

您将如何部署应用程序?如果您使用的是msi或类似的东西,那么您可以在此中创建路径作为设置。我还不确定我将如何部署该应用程序。老实说,我还没走那么远。我希望不必使用msi,因为我们通常只是将我们的应用程序作为可执行文件与依赖文件共享。我并不完全反对这个想法,只是不知道如何实现它。由于某种原因,这个解决方案对我不起作用。错误1“System.Windows.Application”不包含“StartupPath”的定义,无法为我的问题添加更多详细信息:它是一个使用.xaml的GUI应用程序。我是否需要添加另一个using SomeSpace行来使用此?Assembly.GetExecutionGassembly()。Location应该为您提供应用程序路径Dantix-使用您的建议还返回了我正在运行的可执行文件的名称。为了解决这个问题,我使用了:字符串bat_path=System.Reflection.Assembly.getExecutionGassembly().Location;proc.StartInfo.FileName=bat_path.Replace(“\\myAppName.exe”,”)+“\\mybatchfile.bat”@Menimitz您正在使用WPF。Application.StartupPath仅适用于win表单。System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName)将返回应用程序的工作目录。我的程序是一个使用.xaml的GUI应用程序。我还更新了该问题,以扩大我对更好解决方案的希望。