Нет - вы не можете убить их, период. kill -9
тоже не работает. И это не ошибка ядра, это по дизайну. Все сигналы блокируются до тех пор, пока эти процессы не покинут состояние D. Они либо покидают состояние D, либо система перезагружается. Нет, перезагрузка не имеет проблем с этими ребятами.
Обычными виновниками такого рода проблем являются съемные мультимедийные устройства, такие как cdrom. Устройство может быть неисправным, или кто-то нашел способ сделать что-то глупое.
Вместо обычного New-Object
-ComObject
excel.application us это
$excel = [Runtime.Interopservices.Marshal]::GetActiveObject('Excel.Application')
Rest остается неизменным.
Один недостаток. Вы получите только «экземпляры» excel, начатые одним и тем же пользователем, которые инициируют ps1.
Да, вы можете получить доступ к COM-объекту через HWND [дескриптор окна], используя этот WIN32 API ( AccessibleObjectFromWindow ).
(см. образец SO после здесь использования этого api через C #)
blockquote>.
Возможно, вам придется написать сборку в C # и / или , чтобы манипулировать вызовами P / Invoke через Powershell .
Вы можете сделать снимок на нем & amp; Посмотрите, как это происходит.