• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Проблема С Office 2013

  • Автор темы DamirAstana
  • Дата начала
D

DamirAstana

Всем привет.

С появлением 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 597
310
BIT
159
Думаю это особенность 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.
 
D

DamirAstana

Спасибо за ответы.

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

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

oshmianski

Достойный программист
Lotus Team
25.04.2012
711
59
BIT
2
DamirAstana
после Quit можно (да и наверное нужно) делать Set wdoc = Nothing
 

garrick

Lotus Team
26.10.2009
1 349
151
BIT
164
DamirAstana, если не секрет, что вы такое делаете с Word'ом? Мне кажется некорректно "убивать" Word на рабочем месте пользователя, т.к. он мог открыть его самостоятельно и что-то в нём редактировать. А тут вы берёте его и закрываете...
 
D

DamirAstana

DamirAstana, если не секрет, что вы такое делаете с Word'ом? Мне кажется некорректно "убивать" Word на рабочем месте пользователя, т.к. он мог открыть его самостоятельно и что-то в нём редактировать. А тут вы берёте его и закрываете...
Ну как бы на процессы пользователя это не влияет. Я убиваю свой созданный процесс.
 

savl

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

garrick

Lotus Team
26.10.2009
1 349
151
BIT
164
Разве Application.Quit не закрывает Word целиком?
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
159
Разве Application.Quit не закрывает Word целиком?
Закрывает, но если программно создавать процесс и при этом иметь открытый - это 2 разных процесса.
Если создать несколько программных процессов (разные переменные Application Object), то они тоже будут разными.
А вот книги открытые в одном процессе, при его закрытии - закроются все.
 

Вложения

  • wordtask2.png
    wordtask2.png
    32,6 КБ · Просмотры: 129
  • wordtask.png
    wordtask.png
    21,6 КБ · Просмотры: 136
A

akat

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

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
Закрывает, но если программно создавать процесс и при этом иметь открытый - это 2 разных процесса.
Если создать несколько программных процессов (разные переменные Application Object), то они тоже будут разными.
А вот книги открытые в одном процессе, при его закрытии - закроются все.
большинство процессов в виндятке привязано какну к окну (как следует из названия ОС ;) ) м.б. имеет смыл искать процесс по названию окна
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!