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

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

26.01.2022, 02:07. Показов 701. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru