如何使用 ShellExecuteEx 传递参数?

How to pass arguments with ShellExecuteEx?

我正在为共享内存使用 IPC。

我需要用 IPC 打开另一个程序,但我想知道如何传递参数。

下面是我的 IPC 的执行函数 class。

int execute(std::string exePath, std::string exeName, int console = 1)
{
    SHELLEXECUTEINFOA p_info;

    ZeroMemory(&p_info, sizeof(SHELLEXECUTEINFOA)); //초기화
    p_info.cbSize = sizeof(SHELLEXECUTEINFOA);
    p_info.lpFile = exeName.c_str(); // 파일 이름
    p_info.lpDirectory = exePath.c_str(); //파일 위치

    p_info.nShow = console; //콘솔 show
    p_info.fMask = SEE_MASK_NOCLOSEPROCESS;

    return ShellExecuteEx(&p_info);
};

使用 SHELLEXECUTEINFOlpParameters 成员传递参数。

其他一些评论:

  • 由于您显式使用结构的 ANSI 版本 SHELLEXECUTEINFOA,因此对函数调用执行相同的操作并使用 ShellExecuteExA.
  • 是合适的
  • 通过将结构初始化为声明的一部分来避免调用 ZeroMemorySHELLEXECUTEINFOA p_info = { 0 };
  • 您使用了 SEE_MASK_NOCLOSEPROCESS 但随后无法关闭进程句柄。这是句柄泄漏。
  • 除非你用ShellExecuteEx加上runas动词来提升进程,否则叫CreateProcess似乎更合适。为什么要 ShellExecuteEx 直接调用 CreateProcess