1 / 1 / 0
Регистрация: 28.07.2015
Сообщений: 13
|
||||||
1 | ||||||
C# + Wscript.Shell28.07.2015, 21:57. Показов 5356. Ответов 8
Метки нет (Все метки)
Всем доброго времени суток.
Вопрос такой, имеется некая команда, которая выполняется через Shell с использованием следующего кода.
0
|
28.07.2015, 21:57 | |
Ответы с готовыми решениями:
8
Использование Shell Создание ActiveX WScript.Shell Запуск процесса с помощью WScript.Shell Выполнение команды не юзая WScript.Shell |
Администратор
|
|
28.07.2015, 22:40 | 2 |
hamec, Process.Start + Process.WaitForExit.
Добавлено через 10 минут Хотя Process.WaitForExit может и не помочь. Код с методом Run рабочий. Похоже выполняемая команда запускает другое приложение, а сама завершается. Добавлено через 9 минут На stackoverflow описывают алгоритм с использованием job-ов: создаем новый job с помощью CreateJobObject; создаем процесс в suspended состоянии с помощью CreateProcess; ассоциируем процесс с job с помощью AssignProcessToJobObject; запускаем процесс - ResumeThread для дескриптора полученного от CreateProcess. Далее советы разделяются. Надо использовать WaitForSingleObject на дескрипторе job или создать IO completion port и ждать сообщения JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO.
0
|
1 / 1 / 0
Регистрация: 28.07.2015
Сообщений: 13
|
||||||
29.07.2015, 21:31 [ТС] | 3 | |||||
Доброго времени суток.
Спасибо за ответ, начал смотреть в эту сторону получил такой результат. Создаю job, создаю процесс в suspend, присоединяю, стартую, дальше жду следующим кодом
В какую сторону еще посмотреть?
0
|
1 / 1 / 0
Регистрация: 28.07.2015
Сообщений: 13
|
|
29.07.2015, 21:55 [ТС] | 5 |
А не подскажете какой-нибудь пример, нашел пример с записью файла, но не могу понять какое состояние и состояние чего отслеживать мне?
Правильно ли я понимаю, что создавая задачу я подвязываю ее на IOCP и мониторю статусы которые мне возвращаются?
0
|
29.07.2015, 23:02 | 6 | |||||
Так у процесса ведь есть событие Exited
0
|
1 / 1 / 0
Регистрация: 28.07.2015
Сообщений: 13
|
|
30.07.2015, 14:34 [ТС] | 7 |
Добрый день.
Спасибо за ответ, но не поможет. Process запускает команду на запуск иной программы, в контексте проекта это 1С. Соответственно Process запустил и закончил свою работу. Получается мне нужно мониторить созданный процесс от Process, если я правильно понял логику. Только не могу понять как... Добавлено через 5 минут Опять же если я правильно понял, моя задача заключается в следующем: 1) Процесс по запуску программы является родительским; 2) Запускаемая программа, является дочерним процессом; 3) Нужно запретить завершаться родительскому процессу, пока не завершиться дочерний процесс Добавлено через 4 минуты Или как хотя бы получить ID процесса, запущенного от выполнения команды? Добавлено через 2 часа 31 минуту Более менее разобрался, что происходит. Я вызываю файл 1cestart.exe, это launcher, который в свою очередь вызывает уже исполняемый файл 1cs.exe. Остался только вопрос, как можно перехватить запуск исполняемого файла?
0
|
Администратор
|
||||||
30.07.2015, 19:07 | 8 | |||||
Сообщение было отмечено hamec как решение
Решение
hamec, вот готовый метод который запускает процесс и ждет завершения как самого процесса так и всех дочерних процессов:
ProcessHelper
В классе всего одна функция - StartProcessAndWaitForAllChildrenToExit. Первым аргументом нужно передать полный путь к исполняемому файлу. Вторым необязательным аргументом параметры командной строки. Ничего запрещать или перехватывать не надо. Нужно было всего лишь написать код ожидающий завершения родительского процесса и всех дочерних с помощью I/O completion port. Код выше именно это и делает.
1
|
1 / 1 / 0
Регистрация: 28.07.2015
Сообщений: 13
|
|
30.07.2015, 20:16 [ТС] | 9 |
Огромное спасибо. Действительно работает, пойду разбираться.
0
|
30.07.2015, 20:16 | |
30.07.2015, 20:16 | |
Помогаю со студенческими работами здесь
9
Не получается корректно работать с Wscript.shell Wscript.Shell.Run не выводит результат в файл Вызов объектов Wscript.Shell с именем из переменной Как запустить CreateObject ("WScript.Shell") под администратором? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |