Остановите Microsoft Word, повторно используя процесс WinWord.exe, созданный через COM Interop. - PullRequest
3 голосов
/ 18 апреля 2011

Если я запускаю экземпляр текстового приложения через COM Interop, экземпляр Winword.exe запускается в фоновом режиме. Если впоследствии я загружаю документ Word из проводника Windows, он загружается в работающий процесс Winword.exe, который был создан с помощью вызовов COM Interop.

Когда мое приложение затем закрывает объект COM Interop Application (потому что это сделано с ним), все документы, загруженные в него из Проводника Windows, также закрываются.

Есть ли способ предотвратить повторное использование "родным" Microsoft Word процесса Winword.exe, созданного с помощью COM Interop?

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

Обновление: версии Word варьируются от 2003 на большинстве компьютеров пользователей до 2010 на других.

Обновление: описанный обходной путь На этом КБ подходит только частично, поскольку он не работает с открытием документов из проводника Windows.

Ответы [ 3 ]

3 голосов
/ 20 апреля 2011

Нет, не могу остановить это.Вы можете «заставить» слово открыть новый экземпляр, если дважды щелкнуть по значку, изменив ярлык и добавив / n или a / w в командную строку, но это требует много суеты с рабочим столом и профилем пользователя.

Лучше было бы, чтобы ваше приложение попыталось получить загруженный экземпляр через GETOBJECT, если это не удалось, запустите экземпляр через COM, а когда вы будете готовы выгрузить, просто проверьте наличие загруженных документов, если естьлюбые, которые вы НЕ загружали, не выгружали и позволяли пользователю делать это.

Если их нет, выгрузите слово как обычно.

3 голосов
/ 18 апреля 2011

Нет простого / элегантного способа сделать это.(По крайней мере, тот, который я нашел за последние несколько лет поиска).Но в зависимости от вашего сценария могут быть определенные обходные пути, которые отвечают всем требованиям.

Я прибегнул к вызову COM Interop для word из учетной записи, отличной от той, с которой реальные пользователи могли бы войтиЭто сработало надежно до сих пор.

Подойдет ли это для вашего сценария?Если нет, поделитесь своим сценарием.Кроме того, с какой версией Word вы программируете?

1 голос
/ 06 сентября 2011

Существуют различные способы сделать это.Один из них - до закрытия приложения Word через COM Interop.Посмотрите на документы, которые открыты.Закройте только те документы, которые были открыты вашим приложением, сохраняя записи документов, открытых через ваше приложение.Если после закрытия каждого из ваших документов Word число документов равно нулю, закройте приложение word, иначе пусть оно останется открытым.

Надеюсь, что приведенная выше идея решит вашу проблему. Если вам потребуется дополнительная помощь, дайте мне знать.1003 *

...