【发布时间】:2016-04-06 10:31:44
【问题描述】:
我有一个运行批处理文件的非常简单的方法。方法是这样的:
private string _binnPath = Application.StartupPath + "\\Binn";
public void DumpFileSystem(string snapshotFolder)
{
var cwd = Directory.GetCurrentDirectory();
Directory.SetCurrentDirectory(_binnPath);
var snapshotOutput = Path.Combine(Application.StartupPath, snapshotFolder);
snapshotOutput = Path.Combine(snapshotOutput, DateTime.UtcNow.Ticks + "-files.txt");
var batCommand = _binnPath + "\\DumpFileSystem.bat";
string batFilename = batCommand + " " + snapshotOutput;
using (var process = Process.Start(batFilename))
{
process?.WaitForExit();
}
Directory.SetCurrentDirectory(cwd);
}
批处理文件是这样的:
dir /s c:\ > %1
在线var batCommand = _binnPath + "\\DumpFileSystem.bat";我收到这个:
“System.ComponentModel.Win32Exception”类型的未处理异常 发生在 System.dll 中
附加信息:系统找不到指定的文件
这根本没有意义,因为我只是分配一个变量。 我要做的就是使用 snapshotOutput 变量运行批处理文件。 这应该没那么难。
问题
知道如何运行批处理文件吗?和
为什么变量的设置甚至不应该在寻找文件时抛出错误?
【问题讨论】:
-
在 Process.Start(batFilename) 上放一个断点,调试并停在那里,查看 batFilename 的值并检查文件是否在您期望的位置。变化是文件不在%APPROOT%/bin/debug/Binn文件夹中
-
我认为这可能是因为您尝试将参数传递到应该是路径的地方。
-
为什么要调用SetCurrentDirectory函数?您是否尝试注释掉该行?
标签: c# batch-file process