Приложение само перезагружается

Я использую пример отсюда, чтобы перезапустить приложение:

Перезапустите приложение самостоятельно

Это работает хорошо. Пока я не захочу взять параметр, переданный в приложение, и передать его экземпляру перезапуска.

lstrcpy(tbuf, lpCmdLine);
lstrcat(tbuf, L"OSP_PID.EXE ");
lstrcat(tbuf, lpCmdLine);
wsprintf(buf, L"/C ping 127.0.0.1 -n 5 &&  \"%s \"" , tbuf);
ExecWin(L"cmd.exe", buf, TRUE);
PostMessage(hWnd, WM_CLOSE, 0, 0L);buf==  L"/C ping 127.0.0.1 -n 5 &&  \"C:\\VEC25WIN8\\DEBUG\\OSP_PID.EXE C:\\VEC25WIN8\\DEBUG\\ \""

//lstrcat(tbuf, lpCmdLine);
buf==  L"/C ping 127.0.0.1 -n 5 &&  \"C:\\VEC25WIN8\\DEBUG\\OSP_PID.EXE  \""

В первом примере это то, что я пытаюсь выполнить. Пинг работает но потом ничего.

Второй пример показывает, что переданный аргумент удален. Это работает, приложение запускается, но аргумент не передается.

«Buf ==» от панели WATCH отладки.

Я не вижу в этом ничего плохого. Пожалуйста, порекомендуйте.

Boyd

static void ExecWin(LPTSTR acTaskname, LPTSTR acParameters, int nShow )
{ // everything is on the stack - reenterable

SHELLEXECUTEINFO execinfo;
ZeroMemory(&execinfo, sizeof(SHELLEXECUTEINFO));
execinfo.cbSize = sizeof(SHELLEXECUTEINFO);
execinfo.lpParameters = acParameters;
execinfo.lpFile = acTaskname;
execinfo.nShow = nShow;
if ((ShellExecuteEx(&execinfo)) && ((int)execinfo.hInstApp > 32))
{
return;
}
return;
}

0

Решение

Я верю && в командной строке особенность командной строки. ShellExecute не собирается обращать на это внимание. Он считает, что это просто еще один параметр первой команды в строке (пинг).

Ваши варианты:

  1. Вместо этого раскрутите процесс cmd.exe и передайте ему командную строку, используя /C, (Подробнее читайте в /C опция для cmd.exe.)

  2. Заставьте вашу программу выдавать две команды отдельно. Если вам нужно убедиться, что команда ping завершается успешно до второй, вам может потребоваться использовать CreateProcess вместо ShellExecute. CreateProcess предоставит вам дескрипторы, необходимые для ожидания процесса и проверки статуса его выхода.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]