Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 25.01.2022
Сообщений: 3

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

26.01.2022, 02:07. Показов 668. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru