10

我希望这是一个简单的问题,但我的 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 只是重命名一个文件,就是这样。在我得到消息框后,文件名没有改变。

如果我手动双击批处理文件,它工作得很好。我还调整了批处理文件的权限为所有人的完全控制(仅用于测试目的)

4

2 回答 2

27

这应该工作

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

您需要设置 WorkingDirectory 否则命令将在调用应用程序的当前目录中执行

于 2013-05-29T21:02:15.807 回答
4

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

于 2013-05-29T20:51:29.710 回答