【问题标题】:Invoke a batch file [duplicate]调用批处理文件[重复]
【发布时间】:2013-12-01 06:04:56
【问题描述】:

我正在尝试使用以下给定代码执行批处理文件

private void buttonDisable_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Process si = new System.Diagnostics.Process();
            si.StartInfo.FileName = "Q:\\disable.bat";
            si.Start();          
        }

但它只是出现了这个错误:

“System.ComponentModel.Win32Exception”类型的未处理异常 发生在 System.dll 中

附加信息:系统找不到指定的文件

该文件确实存在于该位置

【问题讨论】:

  • q:\\ 是否是网络驱动器
  • 您是否有权访问该目录?
  • Q Drive 是本地驱动器而不是网络驱动器。而且我确实有权访问该目录
  • 在您的代码上方添加一个if (!File.Exists("q:\\disable.bat")) { MessageBox.Show... }。
  • 您是否检查过该文件的权限?也许安全不允许您访问此文件。

标签: c#


【解决方案1】:

此问题的可能解释是执行代码的用户上下文没有映射 Q 驱动器。因此,换句话说,您可以看到文件,但执行代码却看不到。例如,也许这是在 ASP.net 下运行的。

另一个合理的解释是文件不存在。

【讨论】:

  • 我在安装了 q 驱动器的本地机器上执行此操作
  • 似乎在执行代码的上下文中该文件不存在。
【解决方案2】:

这很正常,因为 .bat 不是进程

    System.Diagnostics.Process.Start("cmd.exe", @"/c Q:\disable.bat")  

你能试试这个链接吗

http://www.codeproject.com/Articles/90143/Mapping-Network-Drive-using-C

如果您可以强制驱动器映射,我认为您将能够访问驱动器

【讨论】:

  • 没有。 UseShellExecute 的默认值是 true,因此 .bat 的 shell 关联会完成其余的工作。即便如此,UseShellExecute 与 false 一样,Start() 仍能正常运行
  • 好的,但您同意未设置“UseShellExecute”
  • 默认为true。但无论哪种方式都有效。试试看。
  • 好吧,好吧,如果他强制映射他的驱动器,你会怎么做
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-31
  • 2012-07-17
  • 2017-12-31
  • 2019-08-21
  • 2014-02-26
  • 2021-01-01
  • 2017-12-10
相关资源
最近更新 更多