0 / 0 / 0
Регистрация: 25.01.2022
Сообщений: 3

Получить строку (CommandLine), по которой запущен процесс Windows

26.01.2022, 02:07. Показов 678. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую, коллеги-программисты!

Я сам программист 1С, но для определённых нужд мне потребовалось написать своё приложение для работы с 1С. Из языков я выбрал python - мне, линуксоиду, он показался самым доступным, учитывая то, что я пишу кроссплатформенное приложение на PyQt5. Но мой стаж программирования на python укладывается в два месяца, а из обучения - несколько свободных и бесплатных курсов по PyQt5 на YouTube. То есть нет не то, что глубинных познаний - знаю только самую верхушку, самое простое. Это просто для информации.

Тем не менее, опыта достаточно, чтобы писать свою собственную "Консоль администрирования серверов 1С" (она нужна, в частности, для Linux, так как там с этим (с консолью администрирования) туго, в то время как для "винды" всё есть от самих разработчиков 1С. Но я решил сделать своё кроссплатформенное приложение, чтобы и в Windows иметь альтернативную консоль)

Многие ответы на свои вопросы я так или иначе нахожу в интернете, но две темы поставили меня в тупик. Сейчас озвучу одну, более важную.

Итак. Для запуска сервера администрирования используется команда вида (привожу с некоторыми упрощениями):
  • os.system('start cmd /k "c:\Program Files\1cv8\8.3.20.1674\bin\ras.exe" cluster 10.1.1.8:1540')
Выделенная жирным часть - собственно, сама строка запуска (CommandLine). И вот мне нужно силами python, зная только имя процесса (ras.exe), получить эту самую строку запуска - CommandLine. Перепробовал множество вариантов от psutil и wmi до subprocess, но они все выдают у моего процесса CommandLine = None либо CommandLine = "". Находят имя процесса, PID, время создания и продолжительность работы, но не строку запуска.

При этом тот же Process Explorer с лёгкостью демонстрирует мне искомую CommandLine - то есть, можно же как-то.

Единственный метод, который принёс хоть какой-то результат, это запустить PowerShell от имени администратора и выполнить:
  • Get-WmiObject win32_process -Filter "name like 'ras.exe'"|select CreationDate,ProcessId,CommandLine|ft -AutoSize
Этот вариант выдаёт-таки нужное значение. Но мне-то нужно, чтобы всё это было тихо, внутри самой программы, безо всяких дополнительных окон (да даже в этом виде я не представляю, как это организовать "автоматом"). А нужно, чтобы вообще всё прошло тихо и незаметно для пользователя.

Очень надеюсь на помощь сообщества. И всем заранее спасибо!

Добавлено через 2 часа 49 минут
Возможно, дело в том, что я пытаюсь получить CommandLine для процесса, который запускается службой. Соответственно, нужны права администратора. Как выкрутиться из этой ситуации?

Добавлено через 11 минут
P.S. Да, всё верно - когда я запускаю программу с правами администратора, то получаю CommandLine без проблем (через psutil). Можно ли как-то запустить psutil с повышенными правами (типа как через ctypes.windll.shell32.ShellExecuteW)?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.01.2022, 02:07
Ответы с готовыми решениями:

Получить командную строку (CommandLine|arguments) процесса без прав администратора
Задача: Необходимо получить параметры запуска всех процессов. Если получать данные через Process.GetProcesses() и в нем...

Проверять, запущен ли процесс, а если он не запущен, то запускать его
Всех приветствую. В интернете не нашёл ответа на свой вопрос. Очень нужен vbs-скрипт, который будет проверять, запущен ли процесс, а если...

Проверять, запущен ли процесс, а если не запущен, то выполнять действия
Всем привет! Помогите пожалуйста с такой проблемой: пытаюсь создать bat для циклической проверки раз в 5 минут, запущен ли процесс и если...

1
0 / 0 / 0
Регистрация: 25.01.2022
Сообщений: 3
26.01.2022, 16:56  [ТС]
Продвинулся еще дальше. Есть рабочая команда:
  • os.system(r'''Powershell -Command "& { Start-Process "C:\\Windows\\System32\\WindowsPowerShell \\v1.0\\powershell.exe" -ArgumentList @("Get-WmiObject win32_process") -Verb RunAs } " ''')
Эта команда запускает PowerShell под админом и быстро пролистывает список всех процессов со всей доступной информацией по ним. То есть удалось запустить команду Get-WmiObject win32_process. Сейчас загвоздка в том, что полная команда выглядит так:
- Get-WmiObject win32_process -Filter "name like 'ras.exe'" | select CommandLine, и в таком виде через python не хочет работать, даже если оставить только фильтр по имени процесса (-Filter "name like 'ras.exe'").

Есть мыли, как довести до ума?

Добавлено через 2 часа 49 минут
В общем, получил я свою CommandLine, но альтернативным путём. Метод этот заключается в том, что искомая строка запуска службы прописывается в реестре в строке ImagePath, а из реестра получить информацию не так уж и сложно:
Python
1
2
3
4
5
6
7
8
9
10
11
12
import winreg
try:
   # Ветка в реестре:
   key = winreg.OpenKeyEx(winreg.HKEY_LOCAL_MACHINE, r"SYSTEM\\CurrentControlSet\\Services\\1C Server RAS")
   # Искомая строка:
   value = winreg.QueryValueEx(key, "ImagePath")
   if key:
       winreg.CloseKey(key)
       print(value)
   return value[0]
except Exception as e:
   print(e)
На выходе получаем что-то вида: [('"c:\\Program Files\\1cv8\\8.3.20.1674\\bin\\ras.exe" cluster --service --port=1545 10.1.1.8:1540', 2)], а с этим уже можно работать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.01.2022, 16:56
Помогаю со студенческими работами здесь

Запущен ли процесс? или Завершен ли дочерний процесс моей программы?
Моя программа выполняет execute('cmd', '/C ...'). На момент execute-а других экземпляров cmd.exe нет. Мне хочется узнать, когда окошко cmd...

Запущен ли процесс
Всем привет...Тема изъезженная, но... Так вот...Мне нужно проверить, запущенна ли моя программа...Делаю так: private static Mutex...

Проверка запущен ли процесс
Добрый день! Подскажите пожалуйста, как на c# можно узнать состояние определённого процесса ? То есть: запустили какой то процесс (к...

Проверить, запущен ли процесс
Всем привет. Один раз спросил тут, но все таки не смог реализовать то что хотел. Нужен цикл который проверяет запущен ли процесс если...

Проверить, запущен ли процесс
как сделать так, чтобы программа при запуске проверяла открыт ли процесс winword.exe если нет то автоматически закрывалась заранее спасибо


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru