Я использую пример здесь, чтобы перезапустить приложение:Application перезапускается
Restart an application by itself
Он хорошо работает. Пока я не хочу принять параметр, переданный в приложение, и передать его в экземпляр перезапуска.
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;
}
У вас есть исходный код для 'ExecWin'? –
вне темы: вы можете сэкономить много ручных манипуляций строк и потенциальных переполнений с помощью 'std :: wstring' – user4581301
.................... – user3356861