【问题标题】:How to run embedded batch file using process.start in c# [duplicate]如何在c#中使用process.start运行嵌入式批处理文件[重复]
【发布时间】:2013-02-28 16:46:12
【问题描述】:

我添加了一个批处理文件。让我们在我的 WPF 应用程序中说“batch.cmd”。我右键单击我的项目并添加现有项目,在项目中添加我的批处理文件。我选择了我的批处理文件并将构建操作更改为嵌入式资源。在我构建它之后,我看到这个文件添加到项目中。

现在我需要在我的代码中启动我的批处理文件,我尝试了Process.Start("batch.cmd"),它不起作用,我确实喜欢:

Process p = new Process();
p.StartInfo.FileName = "batch.cmd";
p.Start();

它也不起作用。我怎样才能让我的代码理解这个批次存在于我的项目中以及 \bin 中的某个位置。我不想硬编码它,因为路径总是会改变。

提前致谢。

【问题讨论】:

  • “不起作用”是什么意思?不启动进程?,没有得到文件?,批处理失败?。请帮助我们了解您的问题。
  • 假设 .Net 4.5,试试这个:Process.Start("cmd", "batch.cmd");
  • 不起作用我的意思是应用程序崩溃,它找不到“batch.cmd”它没有得到文件
  • 批处理文件有什么用代码做不到的?如果您要嵌入它,那么您假设它总是相同的,那么为什么不直接在代码中执行它呢?我只是在这里好奇,并不是说你这样做是错误的。看起来很奇怪。

标签: c# wpf cmd


【解决方案1】:

您需要在运行时将文件从资源保存到磁盘,然后从该位置调用它(如果它希望从特定文件夹开始,可能需要调整“当前目录”)。

链接:

以下未验证代码:

  var tempFileName = Path.GetTempFileName();

  Assembly.GetExecutingAssembly()
    .GetManifestResourceStream("my.cmd")
    .CopyTo(File.OpenWrite(tempFileName);

  Process.Start(tempFileName);
  File.Delete(tempFileName);

【讨论】:

  • @Chelseajcole 我添加了链接 - 第一篇文章包含处理资源的完整演练。
【解决方案2】:

你的意思是这样的?

Process p = new Process();
p.StartInfo.FileName = AppDomain.CurrentDomain.BaseDirectory + "\\batch.cmd";
p.Start();

【讨论】:

    猜你喜欢
    • 2013-04-07
    • 1970-01-01
    • 2019-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 2017-04-05
    • 2017-03-28
    相关资源
    最近更新 更多