Из C# откройте произвольное приложение
Связанный вопрос [stackru] здесь.
Я пытаюсь сделать выше, но я хочу сделать процесс еще на один шаг вперед. Я хочу открыть произвольный файл, используя редактор по умолчанию для типа файла. С этого момента я хочу позволить своему пользователю взаимодействовать с файлом, как обычно, или продолжать работать в моем приложении. Расширение - это то, что происходит после того, как пользователь заканчивает редактирование. Есть ли способ, которым я могу захватить событие закрытия (и в идеале сохранить) из внешнего приложения и использовать его в качестве триггера, чтобы сделать что-то еще? Для моих целей подойдет отслеживание закрытия внешнего приложения.
Я могу сделать это в конкретном случае. Например, я могу открыть экземпляр Word из своего приложения и отслеживать события, которые интересуют мое приложение. Однако я хочу отсоединить свое приложение от Word. Я хочу позволить моим пользователям использовать любой редактор документов по своему выбору, а затем управлять хранилищем редактируемого файла незаметно за кулисами.
4 ответа
Вы можете сделать это способом, аналогичным ссылочному вопросу, но синтаксис немного отличается:
System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo =
new System.Diagnostics.ProcessStartInfo("C:\...\...\myfile.html");
process.Start();
process.WaitForExit(); // this line is the key difference
Вызов WaitForExit() будет блокироваться, пока другое приложение не будет закрыто. Вы должны использовать этот код в отдельном потоке, чтобы пользователь мог продолжать использовать ваше приложение.
Использовать FileSystemWatcher
класс для отслеживания изменений в файле.
РЕДАКТИРОВАТЬ: Вы также можете обрабатывать Exited
событие Process
Объект, чтобы узнать, когда программа выходит. Однако обратите внимание, что это не скажет вам, что пользователь закрывает ваш файл, но не завершает процесс. (Что особенно вероятно в Word).
Чтобы прослушать изменение файла, вы можете использовать FileSystemWatcher и прослушать изменение даты последнего изменения.
Вы также можете отслеживать процесс и проверять файл, когда процесс закрывается.
Я нашел этот полезный совет онлайн только сейчас. Кажется, это то, что вы ищете. Эта статья (ссылка не работает) содержит более подробные и полезные советы по программированию на C#.
string filename = "instruction.txt";
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(@filename);
System.Diagnostics.Process rfp = new System.Diagnostics.Process();
rfp = System.Diagnostics.Process.Start(psi);
rfp.WaitForExit(2000);
if (rfp.HasExited)
{
System.IO.File.Delete(filename);
}
//execute other code after the program has closed
MessageBox.ShowDialog("The program is done.");