从c#调用批处理文件

本文关键字:批处理文件 调用 | 更新日期: 2023-09-27 18:15:52

我希望这是一个简单的问题,但我在我的c#应用程序中有以下代码,并且由于某种原因它不会执行我所指向的批处理文件。

private void filesystemwatcher_Renamed(object sender, System.IO.RenamedEventArgs e)
{
    if (File.Exists("C:''Watcher''File.txt"))
    {
        System.Diagnostics.Process proc = new System.Diagnostics.Process();
        proc.EnableRaisingEvents = false;
        proc.StartInfo.FileName = "C:''Watcher''Cleanup.bat";
        proc.Start();
        MessageBox.Show("Cleaned up files, your welcome.");
    }
    else
    {
        label4.Text = "Error: No file found";
    }
}

它将正确显示消息框,因此我知道它正在到达该代码区域,但我没有看到弹出cmd框或任何显示它刚刚运行批处理文件的内容。我也能分辨出来,因为cleanup.bat只是重命名了一个文件,仅此而已。在我得到消息框之后,文件名没有改变。

如果我手动双击批处理文件,它工作得很好。我还将批处理文件的权限调整为每个人的完全控制(只是为了测试目的)

从c#调用批处理文件

应该可以了

System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = "C:''Watcher''Cleanup.bat";
proc.StartInfo.WorkingDirectory = "C:''Watcher";
proc.Start();

您需要设置工作目录,否则命令将在调用应用程序的当前目录下执行

尝试将proc.StartInfo.UseShellExecute设置为true;这告诉操作系统执行文件扩展名的查找,以在注册表中找到正确的处理程序。