应用程序自行重新启动

Application restart itself

本文关键字:重新启动 应用程序      更新时间:2023-10-16

我正在使用此处的示例来重新启动应用程序:

自行重启应用程序

效果很好。 直到我想获取传递给应用程序的参数并将其传递给重新启动实例。

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)的另一个参数。

您的选择是:

  1. 改为启动 cmd.exe 进程,并使用 /C 将命令行传递给它。 (有关详细信息,请阅读cmd.exe的/C选项。

  2. 使程序分别发出这两个命令。 如果需要确保 ping 命令在第二个命令之前成功完成,则可能需要使用 CreateProcess 而不是 ShellExecute。 CreateProcess将为您提供等待进程并检查其退出状态所需的句柄。