У меня есть приложение C#, которое создает файл excel. Но если файл оставлен открытым и приложение запускается во второй раз, оно выдает исключение IO (поскольку в коде я заменяю существующий файл новым) Теперь я хочу проверить, открыт ли файл и убить процесс excel.exe, ссылающийся на этот файл. Есть ли способ, которым это может быть достигнуто?C# - Убить EXCEL.exe процесс, ссылающийся на конкретный файл
Примечание: может быть открыто несколько файлов excel. Я хочу закрыть только процесс, который использует мой файл.
xlFilePath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
File.Copy(xlFilePath + "\\file.xlsx", String.Format("{0}\\OutputFile{1}.{2}.xlsx", xlFilePath, DateTime.Now.Year, DateTime.Now.Month), true);
xlFilePath = Path.Combine(xlFilePath, String.Format("{0}\\OutputFile{1}.{2}.xlsx", xlFilePath, DateTime.Now.Year, DateTime.Now.Month));
appl = new Excel.Application(Visible = false);
wbookss = appl.Workbooks;
wbook = wbookss.Open(xlFilePath);
//Excel.Worksheets wsheetss = appl.Worksheets;
wsheet = wbook.Sheets["Sheet1"];
Application_GenerateReport(wsheet);
Clipboard.Clear();
wbook.Close(true);
wbookss.Close();
appl.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(wsheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(wbook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(wbookss);
System.Runtime.InteropServices.Marshal.ReleaseComObject(appl);
EDIT: файл остается открытым, если в последнем запуске было исключение. Если он открывается пользователем, его можно убить, проверив свойство MainWindowTitle (как было предложено Yeldar).
Я хотел бы сказать, что я думаю, что вы подходите к проблеме с того конца. Ваша программа должна изящно справиться с этим исключением. Возможно, с возможным повторением? Это гораздо приятнее, чем пытаться отправить Excel в забвение (с любыми потенциальными изменениями пользователя с ним). Плюс Office имеет тенденцию навязывать вам _ «возникла проблема с открытием этого файла раньше, откройте его снова?» _ Или некоторые из них – MickyD
^Отчет создается только с помощью этого приложения, никогда не изменяемого вручную. – SharpCoder
[This post] (http://stackoverflow.com/questions/13807102/find-all-open-excel-workbooks) описывает, как вы можете получить этот исполняемый экземпляр excel. Вы должны рассмотреть этот экземпляр вместо того, чтобы убить его. –