【问题标题】:How to execute batch file on the same executable as the "main" C# application如何在与“主”C# 应用程序相同的可执行文件上执行批处理文件
【发布时间】:2019-11-06 08:02:41
【问题描述】:

我有一个给定的 C# 可执行文件,我想在这个可执行文件中执行一个批处理文件。批处理文件设置环境变量,其中一些操作以其他环境变量(IF条件)为条件。

我希望在可执行文件本身内部设置这些环境变量,以便在当前可执行文件上设置环境变量。

当我编写类似“C# 执行批处理相同进程”之类的内容时,我可以在我们的朋友 google 上找到的所有方法似乎都是基于方法 System.Diagnostics.Process 方法,它在不同的进程上执行批处理文件。

谢谢

【问题讨论】:

  • “在这个可执行文件中执行批处理文件”到底是什么意思?命令行将处理您的批处理文件(这显然是一个不同的过程)。您是否尝试使用可以解释批处理文件并直接对命令执行操作的 C# 代码?如果是这样,我的下一个问题将是“为什么?”你能解释一下你的用例吗?我真的想不出为什么System.Diagnostics.Process 在大多数情况下是不够的。
  • 嗯,afaik 在 dotnet 框架(也不是核心)中没有内部批处理执行器,所以这就是你要做的。您可以做的是将脚本引擎嵌入到您的可执行文件中,但如果您想(或必须)坚持使用批处理,那么可以使用 Process...
  • 这听起来像XY problem。更好地解释你的场景。你的意思是在你Porcess.Start() 一个批处理文件执行一些set X=Y 调用之后,你希望你的.NET 可执行文件在你调用System.Environment.GetEnvironmentVariable("X") 时返回这些变量?
  • 您可以从批处理文件中执行您的可执行文件,这将使可执行文件使用与批处理文件使用(并设置/修改)相同的环境(关于环境变量)。跨度>
  • 为什么需要使用批处理文件来执行此操作?您可以直接在 C# 中设置环境变量。

标签: c# batch-file


【解决方案1】:

我有一个控制台应用程序。我希望此控制台应用程序能够解释该批处理文件中的命令,以便在该批处理文件中设置的环境变量在控制台应用程序中得到考虑。

但是您绝对不想用 C# 编写批处理脚本解释器。

如果您希望您的控制台应用程序使用批处理脚本中分配的环境变量,请在该批处理脚本的末尾启动您的可执行文件。

然后,您的应用程序将继承该环境,从而继承那些环境变量。

如果您无法更改所述批处理脚本,则创建一个新的批处理脚本:

  • 运行原始批处理脚本,然后
  • 运行您的可执行文件。

【讨论】:

  • 我正在编写的代码旨在启动一个较旧的应用程序,该应用程序当前通过多个批处理调用启动。我完全知道“理想”是在我的可执行文件之前设置所有环境变量,或者通过 C# 设置所有这些环境变量,但我不能这样做,因为我需要在其中实现它的破旧系统是基于 bach 文件.场景是:我已经运行了应用程序 A,我希望在应用程序 A 上设置批处理文件“B.bat”中定义的环境变量。我唯一的问题是是否有办法这样做?跨度>
猜你喜欢
  • 2011-02-13
  • 1970-01-01
  • 2021-11-24
  • 2014-03-19
  • 2021-05-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多