Из C # откройте произвольное приложение - PullRequest
4 голосов
/ 14 сентября 2009

Смежный вопрос [stackoverflow] здесь .

Я пытаюсь сделать вышеописанное, но я хочу продвинуться на шаг дальше. Я хочу открыть произвольный файл, используя редактор по умолчанию для типа файла. С этого момента я хочу позволить своему пользователю взаимодействовать с файлом, как обычно, или продолжать работать в моем приложении. Расширение - это то, что происходит после того, как пользователь заканчивает редактирование. Есть ли способ, которым я могу захватить событие закрытия (и в идеале сохранить) из внешнего приложения и использовать его в качестве триггера, чтобы сделать что-то еще? Для моих целей подойдет отслеживание закрытия внешнего приложения.

Я могу сделать это в конкретном случае. Например, я могу открыть экземпляр Word из своего приложения и отслеживать события, которые интересуют мое приложение. Однако я хочу отсоединить свое приложение от Word.Я хочу, чтобы мои пользователи могли использовать любой редактор документов по своему выбору, а затем управлять хранением файла, редактируемого дискретно, за сценой.

Ответы [ 4 ]

3 голосов
/ 14 сентября 2009

Вы можете сделать это способом, аналогичным указанному в вопросе, но синтаксис немного другой:

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 () будет блокироваться, пока другое приложение не будет закрыто. Вы должны использовать этот код в отдельном потоке, чтобы пользователь мог продолжать использовать ваше приложение.

2 голосов
/ 14 сентября 2009

Используйте FileSystemWatcher класс для отслеживания изменений в файле.

РЕДАКТИРОВАТЬ : Вы также можете обработать событие Exited объекта Process, чтобы узнать, когда программа закрывается. Однако обратите внимание, что это не скажет вам, что пользователь закрывает ваш файл, но не завершает процесс. (Что особенно вероятно в Word).

0 голосов
/ 14 сентября 2009

Я нашел этот полезный совет онлайн только сейчас. Кажется, это то, что вы ищете. В этой статье (ссылка не указана) содержит некоторые более подробные и полезные советы по программированию на 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.");
0 голосов
/ 14 сентября 2009

Чтобы прослушать изменение файла, вы можете использовать FileSystemWatcher и прослушать изменение даты последнего изменения.

Вы также можете отслеживать процесс и проверять файл, когда процесс закрывается.

...