【问题标题】:Suggestions on calling a batch file from a C# program从 C# 程序调用批处理文件的建议
【发布时间】:2012-08-06 17:28:05
【问题描述】:

我对使用 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 编程中使用的术语知之甚少,因为我的大部分经验都在 uControllers 中。

编辑:我的程序是一个 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();

感谢大家的帮助!

【问题讨论】:

  • 您打算如何部署应用程序?如果您使用的是 msi 或类似的东西,那么您可以在其中创建路径作为设置。
  • 我还不确定我将如何部署该应用程序。老实说,我还没有走到那一步。我不想使用 msi,因为我们经常将我们的应用程序作为可执行文件与依赖文件共享。不过我并不完全反对这个想法,只是不知道如何实现它。

标签: c# batch-file path command prompt


【解决方案1】:

您可以使用Application.StartupPath 获取启动应用程序的可执行文件的路径,不包括可执行文件名称。

根据您的要求,可能是
proc.StartInfo.FileName = Application.StartupPath +"\\mybatfile.bat";

【讨论】:

  • 由于某种原因,此解决方案对我不起作用。错误 1“System.Windows.Application”不包含“StartupPath”的定义为我的问题添加更多详细信息:它是一个使用 .xaml 的 GUI 应用程序。我需要添加另一个 using SomeSpace 行来使用它吗?
  • Assembly.GetExecutingAssembly().Location 应该为您提供应用程序路径
  • Dantix - 使用您的建议还返回了我正在运行的可执行文件的名称。所以为了解决这个问题,我使用了: string bat_path = System.Reflection.Assembly.GetExecutingAssembly().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) 将返回应用程序的工作目录
【解决方案2】:

也许您可以使用application settings,或者如果您的程序是控制台应用程序,您可以使用command-line arguments

【讨论】:

  • 我的程序是一个使用 .xaml 的 GUI 应用程序。我还更新了这个问题,以扩大我对更好解决方案的希望。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-09
  • 2014-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-20
相关资源
最近更新 更多