如何使用 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);
};
使用 SHELLEXECUTEINFO
的 lpParameters
成员传递参数。
其他一些评论:
- 由于您显式使用结构的 ANSI 版本
SHELLEXECUTEINFOA
,因此对函数调用执行相同的操作并使用 ShellExecuteExA
. 是合适的
- 通过将结构初始化为声明的一部分来避免调用
ZeroMemory
:SHELLEXECUTEINFOA p_info = { 0 };
- 您使用了
SEE_MASK_NOCLOSEPROCESS
但随后无法关闭进程句柄。这是句柄泄漏。
- 除非你用
ShellExecuteEx
加上runas
动词来提升进程,否则叫CreateProcess
似乎更合适。为什么要 ShellExecuteEx
直接调用 CreateProcess
?
我正在为共享内存使用 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);
};
使用 SHELLEXECUTEINFO
的 lpParameters
成员传递参数。
其他一些评论:
- 由于您显式使用结构的 ANSI 版本
SHELLEXECUTEINFOA
,因此对函数调用执行相同的操作并使用ShellExecuteExA
. 是合适的
- 通过将结构初始化为声明的一部分来避免调用
ZeroMemory
:SHELLEXECUTEINFOA p_info = { 0 };
- 您使用了
SEE_MASK_NOCLOSEPROCESS
但随后无法关闭进程句柄。这是句柄泄漏。 - 除非你用
ShellExecuteEx
加上runas
动词来提升进程,否则叫CreateProcess
似乎更合适。为什么要ShellExecuteEx
直接调用CreateProcess
?