我有一个批处理文件,可以使用https://aws.amazon.com/cloudfront/webinars/禁用和启用某些驱动程序。 当我通过双击它来运行这个批处理文件时它工作正常。 但是,我尝试使用这一行编写的C#程序运行它:
scatterplot3d(x=sleep$ID, y=sleep$extra, z=sleep$group, lab.z = c(1, 2))
它运行正常,直到它尝试打开devcon.exe,我收到以下消息: windows devcon
之后继续顺利运行。为什么它不能在C#程序中运行?
P.S 由于IP问题,我无法发布批处理代码......
答案 0 :(得分:2)
问题是 - 经常 - "工作目录"。当您在资源管理器中双击某些内容时,工作目录将设置为当前文件夹,因此从批处理文件的角度来看,它的当前目录是它自己的目录。
执行C#应用程序时,通常工作目录是应用程序的exe文件的目录,但不一定(例如,如果使用链接运行应用程序,则可以指定其他工作目录) 。这就是为什么要查找应用程序EXE文件的目录,不能保存使用GetCurrentDirectory
。
所以会发生的情况是应用程序运行批处理文件,但是使用应用程序的目录,而不是批处理文件的目录,作为工作目录。批处理文件中显式cd
的替代方法是在调用Process.Start
时指定工作目录。
答案 1 :(得分:0)
好的,经过一些研究后我发现了这个简单的解决方案: 只需在批处理代码的开头更改为devcon.exe的目录(使用cd命令),即:
cd "C:/*path to the directory of devcon.exe*"
#rest of the code