|
32 / 32 / 0
Регистрация: 05.11.2020
Сообщений: 102
|
|
Как получить значение аргументов командной строки указанного процесса?06.11.2020, 18:11. Показов 1701. Ответов 17
Метки нет (Все метки)
В чем суть вопроса: написал свою прогу-СТАРТЕР, которая готовит нужные данные и запускает другую прогу (назову её ГЛАВНАЯ ПРОГА, но их может быть несколько, с разными параметрами и разными базами данных). И вот пользователи как-то умудряются запускать несколько экземпляров СТАРТЕРА сразу (то ли мышь дребезжит контактами, то ли задержка между клиентским рабочим местом и сервером влияет). Необходимо проге-СТАРТЕРУ запустившись, определить, а не идет ли уже запуск именно этой ГЛАВНОЙ ПРОГИ. Чтобы определить какую именно ГЛАВНУЮ ПРОГУ запускать, СТАРТЕР сам запускается с ключами-параметрами командной строки. Допустим, старт дубля я определю через App.Previnstance, пробегусь по процессам, найду ранее запущенные процессы СТАРТЕРА, но для полной идентификации дубля мне нужно знать ещё и параметры командной строки, с которыми были запущены другие СТАРТЕРЫ. Как же получить параметры командной строки других процессов? Второй день насилую интернет в поисках ответа, получаю намеки на библиотеку kernel32.dll или даже на ntdll.dll, но все описания документов на других языках типа "C++" и при этом весьма туманны. Мне бы пример, как выдернуть эту командную строку, зная процесс.
0
|
|
| 06.11.2020, 18:11 | |
|
Ответы с готовыми решениями:
17
Получить список модулей указанного процесса Использование аргументов командной строки |
|
Модератор
|
|||||||
| 06.11.2020, 19:57 | |||||||
|
Rh2Dark, вообще неправильно организовано все. Нужно при старте создавать глобальный объект ядра и все. Другие копии попытаются создать его и получать ошибку ERROR_ALREADY_EXISTS.
2
|
|||||||
|
|
||
| 06.11.2020, 20:06 | ||
|
Вам надо загрузить параметры процесса в структуру RTL_USER_PROCESS_PARAMETERS, адрес которой определен в структуре PEB параметром ProcessParameters. Именно в ней записана нужная информация - путь к исполняемому файлу процесса и его командная строка. И всё это из ReadProcessMemory. К сожалению на VB6 нет у меня исходника. Но вот тут описано всё достаточно информативно, с нужными структурами и API для этого
1
|
||
|
32 / 32 / 0
Регистрация: 05.11.2020
Сообщений: 102
|
||
| 07.11.2020, 12:17 [ТС] | ||
|
The trick, благодарю за ответ, но использовать WMI нежелательно (особенности корпоративной политики, да и надежность падает). Про глобальный объект ядра не поясните чуть подробнее? Если это приведет к тому, что сможет запуститься лишь один экземпляр проги, то это не подходит.
Добавлено через 25 минут Я встречал в своих поисках описания структур RTL_USER_PROCESS_PARAMETERS и PEB на MSDN, только если бы хорошо знал СИшный глагол, да как работать с API в Visual Basic, давно бы сам допетрил. С API на VB я дружу не очень, больше полагаюсь на примеры. Благодарю что ответили, по крайней мере это доказывает что я на правильном пути. Буду дальше пилить гири и надеяться что попадется то что я смогу использовать или ответят здесь (последнее уже маловероятно, т.к. гуру сказали своё веское слово).
0
|
||
|
Модератор
|
|||
| 07.11.2020, 15:42 | |||
Сообщение было отмечено Rh2Dark как решение
Решение
1
|
|||
|
16 / 15 / 1
Регистрация: 15.08.2020
Сообщений: 96
|
||
| 07.11.2020, 16:29 | ||
|
При запуске программа, любая, пишет в текстовый файл себя и свои параметры запуска, пользователя, время запуска, время выгрузки. Может быть и параметры своего процесса (наверное, это возможно, но не пробовал. Просто, идея) для последующего поиска в процессах. Другая программа считывает эти данные, обрабатывает и делает выводы. Если необходимо, текстовые файлы создаются в папке с доступом пользователям "только запись". Пользуюсь этим, когда принципиально нельзя запускать две копии программы на локальных компьютерах, работающих с файлами на сервере. Вторая и последующие запускаются только для чтения. О чем и предупреждают пользователя. В общем, если по другому не получится, можно попробовать этот вариант. Он может быть и проще и нагляднее. Всегда можно и с самому прочитать, что "о себе пишут программы", кем и кода запущены...
0
|
||
|
sleep
4931 / 4591 / 840
Регистрация: 13.04.2015
Сообщений: 9,743
|
|
| 07.11.2020, 16:30 | |
|
0
|
|
|
Модератор
|
|||
| 07.11.2020, 17:49 | |||
|
Добавлено через 1 минуту
0
|
|||
|
sleep
4931 / 4591 / 840
Регистрация: 13.04.2015
Сообщений: 9,743
|
|||
| 07.11.2020, 17:53 | |||
|
0
|
|||
|
16 / 15 / 1
Регистрация: 15.08.2020
Сообщений: 96
|
||
| 07.11.2020, 20:08 | ||
|
Хотя, может, и недопонял задачу.
0
|
||
|
32 / 32 / 0
Регистрация: 05.11.2020
Сообщений: 102
|
||
| 07.11.2020, 22:21 [ТС] | ||
А я ведь и на этом форуме тоже поиском всё перерыл! Но меня постоянно отсылало то к СИшникам, то Питонщикам... Всё, пойду копаться в коде, экспериментировать... The trick, моё почтение!!!
0
|
||
|
32 / 32 / 0
Регистрация: 05.11.2020
Сообщений: 102
|
|
| 07.11.2020, 23:17 [ТС] | |
|
0
|
|
|
16 / 15 / 1
Регистрация: 15.08.2020
Сообщений: 96
|
||
| 08.11.2020, 10:18 | ||
|
Наверное, одной или обеим будет отказано в доступе. Для этого случая, можно организовать проверку записи... Но чтобы, две программы запустились абсолютно одновременно, а тем более от одного пользователя, моловероятно. Для человека и дребезг мыши может быть одновременным, а для процессов записи-чтения это может быть "космосом". ЯТД.
0
|
||
|
Модератор
|
|||
| 08.11.2020, 11:05 | |||
|
Я пишу это для того что в любом случае нужно разделять запись через мьютекс какой-нибудь. Но раз мы используем мьютекс (или вообще любой объект синхронизации) то и запись в файл тогда не нужна, т.к. можно синхронизировать через мьютекс работу. Добавлено через 30 минут
0
|
|||
|
32 / 32 / 0
Регистрация: 05.11.2020
Сообщений: 102
|
|||||||
| 08.11.2020, 20:37 [ТС] | |||||||
|
И кстати, в попытках проанализировать код получения командной строки вдруг посетили меня сомнения - там есть три выхода из функции, а хэндл процесса закрывать разве не надо?
0
|
|||||||
|
Модератор
|
|||
| 15.11.2020, 21:54 | |||
|
1
|
|||
| 15.11.2020, 21:54 | |
|
Помогаю со студенческими работами здесь
18
Проверка аргументов командной строки
Разбор аргументов командной строки Разбор аргументов командной строки Передача аргументов командной строки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
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(), которая. . .
|