【问题标题】:batch works fine but "windows cannot find devcon.exe" in c# program批处理工作正常,但在 c# 程序中“windows 找不到 devcon.exe”
【发布时间】:2016-12-23 17:35:09
【问题描述】:

我有一个批处理文件,它使用windows devcon 禁用和启用某些驱动程序。 当我通过双击运行此批处理文件时,它工作正常。 但是,我尝试从使用此行编写的 C# 程序运行它:

System.Diagnostics.Process.Start("C:/*path to file*/file.bat");

它运行良好,直到它尝试打开 devcon.exe 并且我收到以下消息:

之后它继续平稳运行。

任何想法为什么它在 C# 程序中不起作用?

附言 由于IP问题,我无法发布批处理代码...

【问题讨论】:

  • 你可以粘贴批处理代码,它唯一的文本......但是......听起来 devcon_64.exe 不在路径中......
  • 是的——如果不是这样,批处理就不会在 C# 之外运行,但它会......
  • 取决于您的代码运行的位置和方式..您还没有解释它可能仍然不是..
  • 尝试在批处理文件中使用 devonc_64.exe 的完整路径(使用 where devcon_64.exe 获取)您的 %path% 变量可能不同。
  • 好的,这显然是问题所在。我会在下面写答案

标签: c# batch-file


【解决方案1】:

问题通常是“工作目录”。当您在资源管理器中双击某些内容时,工作目录将设置为当前文件夹,因此从批处理文件的角度来看,它的当前目录是它自己的目录。

当你执行一个 C# 应用程序时,通常工作目录是应用程序的 exe 文件的目录,但不一定(例如如果应用程序使用链接运行,你可以指定不同的工作目录)。这就是为什么要找到应用程序EXE文件的目录而不是保存使用GetCurrentDirectory。

所以发生的情况是应用程序运行批处理文件,但使用应用程序的目录,而不是批处理文件的目录,作为工作目录。批处理文件中显式cd 的替代方法是在调用Process.Start 时指定工作目录。

【讨论】:

  • 谢谢!如何准确指定工作目录?
  • 通过使用ProcessStartInfo 类的实例作为Process.Start 方法的参数,在WorkingDirectory 属性中指定一个有效值。
【解决方案2】:

好的,经过一番研究,我找到了这个简单的解决方案: 只需在批处理代码的开头更改到 devcon.exe 的目录(使用 cd 命令),即:

cd "C:/*path to the directory of devcon.exe*"
#rest of the code

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-04
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 2014-10-23
    相关资源
    最近更新 更多