2013-05-29 4 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"; 
    } 
} 

Это будет правильно отображать MessageBox, так что я знаю, что она достигает этой области кода, но я не вижу окно 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; это говорит ОС, чтобы выполнить поиск расширения файла, чтобы найти правильный обработчик в реестре.

Смежные вопросы