📑 本文导航
在 Lazarus 中打开外部程序有多种方法,选择哪种取决于你的具体需求。
下面是几种主流方法的对比和详细用法。

⚖️ 方法对比与选择
| 方法 | 跨平台 | 同步/异步 | 主要用途 |
|---|---|---|---|
OpenDocument |
✅ 是 | 异步 | 最推荐:用系统默认程序打开文件或URL。 |
TProcess |
✅ 是 | 异步 | 最强大:需要控制外部程序(如获取输出、传参、等待结束)。 |
SysUtils.ExecuteProcess |
✅ 是 | 同步 | 最简单:简单的“运行并等待”场景。 |
ShellExecute |
❌ 否 (仅Windows) | 异步 | Windows下功能丰富,如以管理员权限运行。 |
🛠️ 常用方法详解
1. OpenDocument (LCLIntf) —— 跨平台“打开”的首选
这是打开文档、图片、URL等最便捷的方式,它会自动调用系统关联的程序。
-
使用前:在单元的
uses子句中添加LCLIntf。 -
用法示例:
pascaluses LCLIntf; // 必须添加此单元 // 用默认浏览器打开网页 OpenDocument('https://www.example.com'); // 用默认图片查看器打开图片 OpenDocument('C:\Users\YourName\Pictures\photo.jpg'); // 用默认PDF阅读器打开PDF OpenDocument('C:\Documents\report.pdf');
2. TProcess (Process) —— 功能最强大的跨平台方案
当需要精细控制外部进程时(如执行带参数的命令、读取输出),TProcess 是标准做法。
-
使用前:在单元的
uses子句中添加Process。 -
基础用法(异步执行):
pascaluses Process; // 必须添加此单元 procedure RunNotepad; var RunProgram: TProcess; begin RunProgram := TProcess.Create(nil); try RunProgram.CommandLine := 'notepad.exe'; // 设置要运行的程序 RunProgram.Execute; // 执行程序(不等待,立即返回) finally RunProgram.Free; end; end;
代码参考自
-
高级用法(等待结束并获取输出):
pascaluses Process; procedure RunCommandAndWait; var RunProgram: TProcess; OutputLines: TStringList; begin RunProgram := TProcess.Create(nil); OutputLines := TStringList.Create; try RunProgram.CommandLine := 'ping 127.0.0.1 -n 3'; // Windows命令 RunProgram.Options := RunProgram.Options + [poWaitOnExit, poUsePipes]; // 等待并捕获输出 RunProgram.Execute; // 执行并等待结束 OutputLines.LoadFromStream(RunProgram.Output); // 读取输出结果 // 在这里处理 OutputLines.Text finally OutputLines.Free; RunProgram.Free; end; end;
3. SysUtils.ExecuteProcess —— 最简单的同步执行
如果只是简单地运行一个程序并等待它结束,这是最直接的方法。
-
使用前:在单元的
uses子句中添加SysUtils。 -
用法示例:
pascaluses SysUtils; procedure RunNotepadSync; begin // 执行 notepad.exe 并等待其关闭 SysUtils.ExecuteProcess('notepad.exe', '', []); end;代码参考自
4. ShellExecute (ShellApi) —— Windows 专属高级功能
当需要在 Windows 下实现特殊功能时(如以管理员权限运行),可以使用此 API。
-
使用前:在单元的
uses子句中添加ShellApi。 -
用法示例:
pascaluses ShellApi; procedure OpenWithElevated; begin // 以管理员权限运行命令提示符 ShellExecute(0, 'runas', 'cmd.exe', nil, nil, SW_SHOWNORMAL); end;
💎 总结与建议
-
最常用:对于绝大多数“打开”场景(文件、网址),直接用
OpenDocument。 -
最强大:需要执行带参数的命令、读取输出或精细控制时,使用
TProcess。 -
最简单:只需同步运行一个程序并等待其结束,用
SysUtils.ExecuteProcess。 -
最特殊:仅在 Windows 下需要提权等特殊操作时,考虑
ShellExecute。