
掌握Windows四种进程创建方法
下载需积分: 50 | 8.43MB |
更新于2025-02-06
| 98 浏览量 | 举报
收藏
在Windows操作系统中,创建新进程是一项基本且重要的任务,尤其是在进行软件开发和系统管理时。了解如何使用不同方法创建进程是IT专业人员必须掌握的技能之一。在本篇文章中,我们将详细讨论四种创建Windows进程的方法:WinExec、CreateProcess、ShellExecute以及CreateProcessAsUser。
### WinExec
WinExec是最早用于创建进程的API之一,自Windows 95时期起就开始被使用。它提供了一种简单的方式来运行其他程序。其函数原型如下:
```c
UINT WinExec(
LPCSTR lpCmdLine, // 指向要执行的命令行参数的指针
UINT uCmdShow // 指定应用程序窗口如何显示
);
```
- `lpCmdLine` 是指向以null结尾的字符串的指针,该字符串指定了要执行的命令行。如果`lpCmdLine`包含一个可执行文件的名称,则该文件会被加载并执行。如果`lpCmdLine`包含一个已存在的可执行文件的路径,则该文件会被执行。
- `uCmdShow` 指定了如何显示该进程的窗口。它通常取自`ShowWindow`函数的标志,例如`SW_SHOW`、`SW_HIDE`等。
尽管WinExec简单易用,但它已经被视为过时,而且不支持一些现代的特性,如Unicode和错误返回值。因此,新的程序开发中推荐使用更为强大的CreateProcess函数。
### CreateProcess
CreateProcess是Windows API中用于创建一个新进程和它的主线程的首选方法。这个函数非常复杂,提供了极高的灵活性和丰富的选项。函数原型如下:
```c
BOOL CreateProcess(
LPCWSTR lpApplicationName, // 可执行文件的名称
LPWSTR lpCommandLine, // 命令行参数字符串
LPSECURITY_ATTRIBUTES lpProcessAttributes, // 进程安全属性
LPSECURITY_ATTRIBUTES lpThreadAttributes, // 线程安全属性
BOOL bInheritHandles, // 是否继承句柄
DWORD dwCreationFlags, // 创建标志
LPVOID lpEnvironment, // 新进程的环境块
LPCWSTR lpCurrentDirectory,// 新进程的当前目录名
LPSTARTUPINFO lpStartupInfo, // 启动信息
LPPROCESS_INFORMATION lpProcessInformation // 进程信息
);
```
- `lpApplicationName` 指定了要启动的程序的名称,可以是可执行文件的完整路径。
- `lpCommandLine` 提供了一个字符串,包含了传递给新进程的命令行参数。
- `lpProcessAttributes` 和 `lpThreadAttributes` 允许我们设置新进程和线程的安全属性。
- `bInheritHandles` 指定新进程是否可以继承调用进程的句柄。
- `dwCreationFlags` 提供了一系列标志,可以用于控制新进程的创建方式和运行行为。
- `lpEnvironment` 指定了新进程的环境变量。
- `lpCurrentDirectory` 指定了新进程的当前目录。
- `lpStartupInfo` 提供了窗口启动和控制信息。
- `lpProcessInformation` 返回新创建的进程和线程的句柄。
CreateProcess是创建Windows进程最为常用的API,提供了其他方法无法比拟的灵活性和控制力。它支持Unicode字符集,并能够返回关于进程和线程创建的详细错误信息。
### ShellExecute
ShellExecute和ShellExecuteEx函数允许用户执行一个程序,并可以使用文件关联来找到正确的程序来打开一个文件或URL。ShellExecute和ShellExecuteEx函数属于Windows Shell API。函数原型如下:
```c
HINSTANCE ShellExecute(
HWND hwnd, // 父窗口句柄
LPCSTR lpOperation, // 操作
LPCSTR lpFile, // 文件名
LPCSTR lpParameters, // 参数字符串
LPCSTR lpDirectory, // 启动目录
INT nShowCmd // 显示命令
);
HINSTANCE ShellExecuteEx(
LPSHELLEXECUTEINFO lpExecInfo // 一个包含了操作相关信息的结构体
);
```
ShellExecute的参数非常简单,适用于只需要执行基本操作(如打开、编辑、打印等)的场景。它也支持简单程序的启动。ShellExecuteEx提供了更多的选项和灵活性,是一个扩展版本。
### CreateProcessAsUser
CreateProcessAsUser函数用于以特定用户的身份创建一个新进程。它与CreateProcess非常相似,但增加了安全权限,允许以另一个用户的身份(通常是具有较低权限的用户)来创建进程,这在需要隔离进程权限的场合非常有用。
```c
BOOL CreateProcessAsUser(
HANDLE hToken, // 用户令牌
LPCWSTR lpApplicationName, // 可执行文件的名称
LPWSTR lpCommandLine, // 命令行参数字符串
LPSECURITY_ATTRIBUTES lpProcessAttributes, // 进程安全属性
LPSECURITY_ATTRIBUTES lpThreadAttributes, // 线程安全属性
BOOL bInheritHandles, // 是否继承句柄
DWORD dwCreationFlags, // 创建标志
LPVOID lpEnvironment, // 新进程的环境块
LPCWSTR lpCurrentDirectory,// 新进程的当前目录名
LPSTARTUPINFO lpStartupInfo, // 启动信息
LPPROCESS_INFORMATION lpProcessInformation // 进程信息
);
```
`hToken` 是一个访问令牌,它代表了一个特定的用户,并用于创建进程。这个函数通常与Windows安全模型和用户权限管理结合使用。
以上就是Windows操作系统中创建进程的四种主要方法。每种方法都有其特定的使用场景和优势,但CreateProcess因其灵活性和控制度无疑是创建Windows进程的最强大工具。而WinExec由于其功能限制,已经在实际应用中逐渐被淘汰。ShellExecute适用于简单的启动操作,而CreateProcessAsUser则为需要特定用户身份的复杂权限管理场景提供了必要的支持。了解这些方法,并能在适当的时候选择正确的API进行进程创建,是每个Windows程序员和系统管理员必须掌握的技能。
相关推荐







m_buddy
- 粉丝: 2347
最新资源
- UML建模实例深入解析及应用指导
- WebService实现远程Access数据分页技术实例
- ASP.NET编程进阶指南:深入Part2精髓
- 实用键盘记录器,记录程序运行及键盘输入
- P3软件下载:工程管理效率提升利器
- 学生宿舍管理系统Delphi完整实例
- 斯坦福大学iphone开发教程深度解析
- 自定义界面多分辨率GPS设备touchCE操作指南
- C#开发Windows Form桌面弹球游戏指南
- PHP开发WML应用:创建手机网站快速指南
- 多功能绿色音乐格式转换器介绍
- 网络原理与硬件基础课件解析
- PartyTarget 2.31版血量显示插件更新亮点
- SudukoV2:数独游戏的.NET2005计算程序
- 五笔输入法源码分享:开放研究与共同改进
- 机械原理减速箱课程设计详细图纸资料
- PathFinder2D算法在ASTAR路径搜索中的应用
- VB.NET开发的计算机机房管理系统设计
- My97DatePicker:实用JS中英文日历控件介绍
- Flex开发环境下的UserInfoSys源码解析
- Delphi控件实现GSM猫的串口通信及实例分析
- Spring与Struts集成教程及实例分析
- S&R&S系统工具包9.7.1112F版本操作指南
- 实现多选功能的JavaScript树形控件及节点获取方法