Вопрос или проблема
Итак, это действительно странный вопрос. И полное раскрытие информации: я знаком с проблемой XY и с тем, как она применима здесь, поэтому я просто хочу уточнить, что то, что я делаю, больше является упражнением для меня, а не конкретно для решения практической проблемы.
С этим разобрались, я пишу скрипт PowerShell и мне нужен процесс DllHost.exe
, чтобы он действовал как родитель для процесса, который я собираюсь запустить. Get-Process -Name DllHost | Select-Object -First 1
работает достаточно хорошо, но из-за природы COM Surrogate нет гарантии, что процесс, к которому я подключусь, не завершится между выбором и выполнением моей задачи, или даже что он будет (хотя такое состояние маловероятно). Я попытался запустить свой собственный DllHost
, чтобы обойти это, но без какой-либо DLL для хостинга он просто завершается немедленно.
Итак, мой вопрос: существует ли какой-нибудь процесс DllHost.exe
, который я могу надежно ожидать увидеть постоянно работающим на системе Windows 11, и как я могу его идентифицировать; ИЛИ как я могу запустить свой собственный процесс DllHost.exe
, который не завершится, пока я этого не захочу.
Спасибо.
Ответ или решение
Создание или поиск надежного процесса DllHost.exe
для использования в качестве родительского является нестандартной задачей, но интересной с точки зрения изучения поведения и возможностей Windows. Рассмотрим два аспекта вашего вопроса: как найти существующий надежный процесс DllHost.exe
и как создать свой собственный.
Поиск надежного процесса DllHost.exe
Процесс DllHost.exe
используется в Windows как COM Surrogate, что означает, что он выступает в роли запускающей среды для других COM объектов, изолируя их от ядра системы для повышения безопасности и стабильности. Однако из-за этой роли DllHost.exe
может запускаться и завершаться динамически.
-
Мониторинг существующих процессов: Используйте PowerShell для проверки существующих процессов
DllHost.exe
. Вы уже упомянули об использовании командыGet-Process -Name DllHost | Select-Object -First 1
, однако результат может быть недолговечным. Чтобы уменьшить вероятность задержки или ошибки, можно разработать цикл, который будет периодически проверять наличие процессовDllHost.ex
, используя, например, команду:while ($true) { $dllhost = Get-Process -Name DllHost | Select-Object -First 1 if ($dllhost) { break } Start-Sleep -Seconds 1 }
-
Обнаружение процессов с долгим временем работы: Можно отфильтровать процессы по времени их выполнения, выбирая те, которые работают уже долгое время, что может указать на их стабильность и вероятность продолжения работы:
Get-Process -Name DllHost | Where-Object { $_.StartTime -lt (Get-Date).AddMinutes(-10) } | Select-Object -First 1
Создание собственного процесса DllHost.exe
Запуск собственного DllHost.exe
без привязанной библиотеки DLL приведет к его немедленному завершению. Чтобы этого избежать, можно использовать следующий подход:
-
Создание собственной загрузочной DLL: Если вам нужен долгосрочный процесс, создайте специальную DLL, которая будет дожидаться ваших команд. Простая заглушка может быть написана на C++, C# или другом языке, поддерживающем COM/ActiveX.
-
Регистрация DLL: Вам необходимо зарегистрировать эту DLL в системе так, чтобы
DllHost.exe
мог её выполнять. Далее, с помощьюDllHost.exe /Processid:<Ваш COM ID>
, можно запуститьDllHost.exe
с этой DLL, что позволит процессу оставаться активным. -
Использование автономного COM объекта: Если у вас есть собственная библиотека, зарегистрированная на вашем компьютере, вы можете использовать её GUID для запуска COM Surrogate.
Важные замечания
- Безопасность и производительность: Убедитесь, что любые создаваемые вами DLL безопасны и не содержат кода, который может негативно сказаться на производительности или безопасности системы.
- Административные права: Для регистрации и манипуляций с DLL могут потребоваться административные права.
- Рискованность операций: Поскольку вы экспериментируете в тестовых целях, делайте это в среде, безопасной для тестирования, возможно, на виртуальной машине.
Эти решения могут помочь вам лучше понять и контролировать процессы DllHost.exe
на вашем компьютере, предоставляя дополнительное пространство для экспериментов и изучения механизмов работы Windows.