应用程序自行重新启动
Application restart 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 ""
在第一个例子中,这就是我想要完成的。 ping有效,但随后什么都没有。
第二个示例显示已删除的传递参数。 这有效,应用程序启动,但没有传递任何参数。
"buf=="来自调试 WATCH 面板。
我认为这没有任何问题。 请指教。
博伊德
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;
}
我相信命令字符串中的&&
命令提示符的功能。 ShellExecute不会关注这一点。 它认为它只是该行上第一个命令(ping)的另一个参数。
您的选择是:
-
改为启动 cmd.exe 进程,并使用
/C
将命令行传递给它。 (有关详细信息,请阅读cmd.exe的/C
选项。 -
使程序分别发出这两个命令。 如果需要确保 ping 命令在第二个命令之前成功完成,则可能需要使用 CreateProcess 而不是 ShellExecute。 CreateProcess将为您提供等待进程并检查其退出状态所需的句柄。
相关文章:
- 如何从 Windows 上的服务在未登录用户的桌面上启动应用程序
- 当该应用程序中加速文件的最后一个修改时间发生更改时,如何重新启动应用程序
- 使用WinSparkle更新新版本后,它不会自动启动应用程序
- 在启动C 应用程序时,如何检查MongoDB是否正在运行
- C#/C++:启动应用程序并处理其对系统的I/O调用
- 为什么 OpenSL ES 不会在每次启动应用程序时播放音频
- 如何知道启动应用程序的可执行名称
- Ubuntu 上的 Qt+OpenCV 无法运行/调试:无法启动应用程序
- Qt/QML:如何在不重新启动应用程序的情况下"switch to"或"open"另一个 QML 文件?
- 启动应用程序"Access denied" - Windows Vista
- 重新启动应用程序:延迟
- 远程启动C++应用程序
- 如何在每次启动应用程序时摆脱 UAC
- 在 DLL 中启动应用程序
- Windows编辑启动应用程序C/C++
- 从没有任务栏按钮的c++启动c#应用程序
- 查找启动应用程序的lpClassName,以便在FindWindow wniapi c++中使用
- 程序崩溃时重新启动应用程序
- Windows c++如何最大限度地启动应用程序
- 在未处理的异常时重新启动应用程序