Проблема С Office 2013

26.05.2014
9
0
#1
Всем привет.

С появлением Windows 8.1 и офиса 2013 выявилась такая проблема, что winword.exe висит в процессах после выполнения метода Quit() где то минут 5, потом процесс убивается и все идет нормально

Код:
Set wdoc=CreateObject("Word.Application")	
wdoc.Documents.Open(templateFile)
Set wordDoc=wdoc.ActiveDocument
wdoc.Visible=false

' тут у нас заполнение шаблона ворда
.....

createWordFile = "templateName.doc"
wordDoc.SaveAs(createWordFile)		
wordDoc.close
wdoc.Quit
Set wdoc = Nothing
Рабочая станция является моноблоком. Причем ворд висит и сам по себе, когда открываешь и закрываешь любой ворд документ. Отключал все надстройки для ворда - не помогло. В процессах висит и Excel.

Кто нибудь сталкивался с такой проблемой?
 

savl

Lotus team
28.10.2011
2 136
105
#2
Думаю это особенность win8 (в частности metro-UI), как и в MacOS 10.10, это делано для быстрого переключения между приложениями в metro-UI. Многозадачность, как её видят или как она есть... Процессы не завершаются до конца сразу, а висят какое-то время.
Ось предназначалась для всех устройств с сенсорным вводом, так что в стандартные desk тоже перекочевало.
Надеюсь в Win10 будет все же иначе.
Думаю надо ковырять в сторону настроек оси, это явно не косяк Office.
Если есть возможность, то можно попробовать поставить на вторую машину с Win8 другой Office (2007/2010) и проверить.
У нас сервак 2012(ядро win8 без metro-ui) + Office 2010, проблем нет.
Нашел еще такой совет, но не уверен что это то что нужно, хотя...:
How To enable or disable Background Running Windows 8 Metro Apps?
Step 1: Go To start screen in Your Windows 8 PC or tab
Step 2: Now right click on the apps that you want to turn off running in the background
Step 3: You will see “Turn live tile off” option at the bottom of your screen , just click on it.
 
26.05.2014
9
0
#4
Спасибо за ответы.

Всегда сначала используйте GetObject, а если объект не получен (будет ошибка, код не помню), тогда уже CreateObject.
В первую очередь об этом тоже подумали, но:
1) Если объекта нет, то мы его создаем, получается потом его нужно будет тоже завершать, что опять же не получится, хотя конечно можно один процесс оставить, пусть висит =)
2) Придется переписывать везде где используется office, а решение нужно сейчас, без изменения программного кода, пока что.

Насчет win8, думаю так и есть. В инете пару проблем таких встречаются, но толком решения не описаны. Вот найти бы это ПО или службу которая так делает... Тоже есть обычный ноут, с windows 8.1, установили на него office 2013 - процесс завершается после закрытия сразу.
 

oshmianski

Достойный программист
Lotus team
25.04.2012
556
8
#5
DamirAstana
после Quit можно (да и наверное нужно) делать Set wdoc = Nothing
 

garrick

Lotus team
26.10.2009
911
61
#6
DamirAstana, если не секрет, что вы такое делаете с Word'ом? Мне кажется некорректно "убивать" Word на рабочем месте пользователя, т.к. он мог открыть его самостоятельно и что-то в нём редактировать. А тут вы берёте его и закрываете...
 
26.05.2014
9
0
#7
DamirAstana, если не секрет, что вы такое делаете с Word'ом? Мне кажется некорректно "убивать" Word на рабочем месте пользователя, т.к. он мог открыть его самостоятельно и что-то в нём редактировать. А тут вы берёте его и закрываете...
Ну как бы на процессы пользователя это не влияет. Я убиваю свой созданный процесс.
 

savl

Lotus team
28.10.2011
2 136
105
#8
Я убиваю свой созданный процесс.
garrick
Подпроцесс, если быть точнее, причем на каждый созданный документ он свой, если имена файлов разные.
Основной процесс notes2.exe, подпроцесс winword.exe.
По логике, если убить все связные лотусовые процессы, то убивается и вызванные подпроцессы.
Такое можно наблюдать когда открываешь вложения из почты и затем убивать лотусовые процессы: связные процессы закрываются.
Другой дело когда используешь что-то типа кода, который тут, убивается всё.
 

savl

Lotus team
28.10.2011
2 136
105
#10
Разве Application.Quit не закрывает Word целиком?
Для просмотра контента необходимо: Войти или зарегистрироваться
Закрывает, но если программно создавать процесс и при этом иметь открытый - это 2 разных процесса.
Если создать несколько программных процессов (разные переменные Application Object), то они тоже будут разными.
А вот книги открытые в одном процессе, при его закрытии - закроются все.
 

Вложения

akat

Lotus team
16.06.2010
243
4
#11
Может это как-то связано с сервисом SuperFetch и включенным ReadyBoost.
(Сам сейчас проверить не могу, "Виндоуз ИксПи бикоз тугеза" :)
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 601
277
#12
Закрывает, но если программно создавать процесс и при этом иметь открытый - это 2 разных процесса.
Если создать несколько программных процессов (разные переменные Application Object), то они тоже будут разными.
А вот книги открытые в одном процессе, при его закрытии - закроются все.
большинство процессов в виндятке привязано какну к окну (как следует из названия ОС ;) ) м.б. имеет смыл искать процесс по названию окна