63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457
1

ShellExecute не стартует процесс с длинной командой

09.02.2017, 14:57. Показов 597. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Столкнулся с такой проблемой. Есть у нас Windows Service, который стартует процесс в любой сессии через LaunchProcessAsUser. Этот процесс есть обычная exe, которая исполняет ShellExecute и дает путь к другой exe, и затем команду. Делает это так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
int main(int argc, wchar_t* argv[])
{
    const DWORD TIMEOUT = 60000;
 
    int arg_count;
    LPWSTR* cmd_args = CommandLineToArgvW(GetCommandLineW(), &arg_count);
 
    std::wstringstream wss;
 
    wss << "-unused"; // added because we need to pass some info as 0 parameter
    wss << " parameter"; // added because EU parser sucks
 
    for (size_t i = 0; i < arg_count; ++i)
        wss << cmd_args[i] << " ";
 
    Logger::write(L"ElevatorCommand", wss.str());
 
    SHELLEXECUTEINFO shell_info;
    ZeroMemory(&shell_info, sizeof(shell_info));
 
    shell_info.cbSize = sizeof(SHELLEXECUTEINFO);
    shell_info.fMask = SEE_MASK_ASYNCOK | SEE_MASK_NO_CONSOLE;
    shell_info.hwnd = NULL;
    shell_info.lpVerb = NULL;
    shell_info.lpFile = L"C:/AgentTDK/ElevationUtility";
    shell_info.lpParameters = (LPCWSTR)wss.str().c_str();
    shell_info.lpDirectory = NULL;
    shell_info.nShow = SW_MINIMIZE;
    shell_info.hInstApp = NULL;
    ShellExecuteExW(&shell_info);
 
    DWORD start = ::GetTickCount();
    while (shell_info.hProcess == NULL && ::GetTickCount() - start < TIMEOUT)
        continue; // waiting for process to open
 
    return 0;
}
Все приходит ОК, лог выводит всю команду нормально. Но если команда больше примерно 96 или что там символов, то процес не стартует. Что может быть, подскажите?

Добавлено через 8 минут
[SOLVED]
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.02.2017, 14:57
Ответы с готовыми решениями:

Как убить процесс IExplore.exe (и все его дочерние процессы), запущеный командой ShellExecute?
То есть, я сам запускаю експлорер, ...

Какой командой можно завершить процесс explorer.exe?
Всем доброго времени суток. Интересует такой вопрос: какой командой можно завершить процесс...

Не стартует процесс
Есть программа написанная на С++, и есть так называемый лаунчер написанный на C# задача в том что...

Как изменится процесс сканирования в клавиатуре, если командой 0F3h задан самый быстрый режим
Добрый день! Как измениться процесс сканирования в клавиатуре, если командой 0F3h задан самый...

2
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
09.02.2017, 14:59 2
Что возвращает ShellExecute? Если FALSE, то какой при этом GetLastError()?
0
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457
09.02.2017, 20:33  [ТС] 3
Сейчас конкретизирую.

Он успешно стартует процес.
Но если длинная команда, то почему то argc == 1 в запускаемой програме вместо 9 параметров которые я передаю. И то он почему то пустой.

Добавлено через 4 часа 57 минут
Поменял на ShellExecute вместо Ex - заработало. Ничего не понимаю уже. Почему так??
0
09.02.2017, 20:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.02.2017, 20:33
Помогаю со студенческими работами здесь

При входе в Windows XP, Не работает панель задач (на стартует процесс explorer.exe)
При входе в Windows XP, Не работает панель задач(не нажимается) Я захожу в Диспетчер Задач удаляю...

Можно ли закрыть приложение командой в консоле, если открыл командой system();?
Открыл system(&quot;roulette.JPG&quot;); А как закрыть?

Переделать функцию поиска самой длинной строки так, чтобы она правильно печатала размер произвольно длинной входной строки и воспроизводила ее
Переделать головную функцию поиска самой длинной строки так, чтобы она правильно печатала ...

Не стартует системник с ДВУМЯ планками памяти, по одной стартует
не включается манитор когда стоят две оперативки на 2 гб ddr3 в n68-gs3 ucc,по одной -все работает....


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru