首页 > 编程语言 >WinExec 函数, 启动其他应用程序

WinExec 函数, 启动其他应用程序

时间:2022-11-03 16:23:58浏览次数:66  
标签:可执行文件 lpCmdLine 函数 应用程序 exe WinExec

WinExec 函数, 启动其他应用程序

[详细信息](WinExec 函数 (winbase.h) - Win32 apps |微软学习 (microsoft.com))

语法

UINT WinExec(
	[in] LPCSTR lpCmdLine,
    [in] UINT uCmdShow
);

参数

[in] lpCmdLine

要执行的应用程序的命令行(文件名和可选参数)。如果lpCmdLine参数中的可执行文件的名称不包含目录路径,则系统将按以下顺序搜索可执行文件:

  1. 从中加载引用程序的目录
  2. 当前目录
  3. 视窗系统目录。函数检索此目录的路径
  4. 视窗目录。函数检索此目录的路径
  5. PATH环境变量中列出的目录

[in] uCmdShow

显示选项。有关可接受值的列表

返回值

如果函数成功,则返回值大于31

如果函数失败,则返回值是以下错误值之一。

返回代码/值 描述: __________
0 系统内存或资源不足。
ERROR_BAD_FORMAT .exe文件无效。
ERROR_FILE_NOT_FOUND 找不到指定的文件。
ERROR_PATH_NOT_FOUND 找不到指定的路径。

言论

当启动的进程调用消息函数或达到超时限制时WinExec 函数将返回。为避免等待超时延迟,请在通过调用 WinExec 启动的任何进程中尽快调用 GetMessage 函数。

安全备注

可执行文件名称被视为 lpCmdLine 中第一个以空格分隔的字符串。如果可执行文件或路径名中有空格,则由于函数分析空格的方式,存在运行其他可执行文件的风险。以下示例很危险,因为该函数将尝试运行“程序.exe”(如果存在),而不是“MyApp.exe”。

语法复制

WinExec("C:\\Program Files\\MyApp", ...)

如果恶意用户在系统上创建名为“Program.exe”的应用程序,则使用程序文件目录错误地调用 WinExec 的任何程序都将运行此应用程序而不是预期的应用程序。

若要避免此问题,请使用“创建进程”而不是“WinExec”。但是,如果出于旧版原因必须使用 WinExec,请确保应用程序名称括在引号中,如下面的示例所示。

语法复制

WinExec("\"C:\\Program Files\\MyApp.exe\" -L -S", ...)

简单例子:

#include "windows.h"
#include <iostream>
using namespace std;
int main() {
    WinExec("notepad.exe Number.txt", SW_SHOW); // 调用记事本
}

标签:可执行文件,lpCmdLine,函数,应用程序,exe,WinExec
From: https://www.cnblogs.com/luketebo/p/16807683.html

相关文章