Process.Exited поднимается сразу после Process.Start

Я столкнулся со странной проблемой с событием Process.Exited в .NET Framework v4.5.2.

У меня есть приложение WPF, которое при нажатии кнопки открывает документ Word через Process. Я подписываюсь на событие Process.Exited, чтобы знать, когда документ Word закрыт, чтобы я мог записать некоторый статус в базу данных.

Вот и странное поведение. Предположим, я открыл любой другой документ Word или просто открыл пустой документ; и пытается открыть документ из моего приложения с помощью нажатия кнопки, тогда событие Process.Exited запускается, как только вызывается Process.Start(). Аргумент отправителя в Process.Exited имеет значения как документ, который я только что открыл из приложения нажатием кнопки.

Ниже приведен пример фрагмента кода:

Process p;

private void WordWindow_Loaded(object sender, RoutedEventArgs e)
{
   p = new Process();
   p.EnableRaisingEvents = true;
   p.Exited += P_Exited;
}

private void Button_Click(object sender, RoutedEventArgs e)
{
   var pinfo = new ProcessStartInfo();
   pinfo.FileName = @"C:\docs\Main Doc.docx";

   p.StartInfo = pinfo;
   p.Start();
}

private void P_Exited(object sender, EventArgs e)
{
    
}

Кто-нибудь сталкивался с подобной проблемой раньше? Я прошел через аналогичную тему, но не нашел решения. Я начинаю задаваться вопросом, это из-за того, как реализован процесс MS-Word, или из-за сбоя в реализации Process.

Любая помощь будет оценена.

Спасибо.


person abhilashca    schedule 12.07.2021    source источник
comment
ваш процесс ProcessStartInfo закончил работу? Вы его отладили?   -  person demo    schedule 12.07.2021
comment
Именно так работает Word: при запуске он проверяет, запущен ли в данный момент процесс Word. Если это так, он сообщает об этом (используя какой-либо механизм межпроцессного взаимодействия) и говорит «Эй, покажи новое окно, содержащее ‹Main Doc.docx›», а затем завершает работу. Попробуйте сами: откройте несколько документов Word и посмотрите, сколько WINWORD.exe процессов вы получите.   -  person canton7    schedule 12.07.2021
comment
Да, я заметил несколько winword.exe при открытии документов Word. Что меня озадачивает, так это то, что когда Process.Exited поднимается, в этом конкретном сценарии возвращается самая последняя открытая информация о документе. Кроме того, я заметил, что при открытии документа поднимается Process.Exited. Теперь, когда я закрываю этот документ, Process.Exited не возникает, так как он уже возник во время Process.Start().   -  person abhilashca    schedule 12.07.2021
comment
Я сказал противоположное тому, что вы думали, я сказал: я сказал, что существует только один процесс WINWORD.exe. Не несколько, один.   -  person canton7    schedule 12.07.2021
comment
Событие Exited возникает, поскольку процесс завершился. Это то, что говорит вам событие. Как правило, это происходит с программами, написанными для активации существующих экземпляров вместо запуска новых. Смотрите дубликат.   -  person Peter Duniho    schedule 12.07.2021