2013-05-29 97 views
9

我希望这是一个简单的问题,但我在我的C#应用​​程序中有以下代码,出于某种原因它不会执行我指向的批处理文件。从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只是重命名一个文件,就是这样。收到消息框后,文件名称没有改变。

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

+2

的当前目录执行**你**的欢迎。 –

回答

21

这应该工作

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

您需要,否则设置WorkingDirectory该命令将在什么是调用应用程序

+0

非常感谢! – Bit10Bytes

4

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

相关问题