将VCL应用迁移至Intraweb后如何启动wwwroot下的外部exe程序
IntraWeb中启动外部exe分两种常见场景,对应实现方式如下:
场景1:需要在IntraWeb服务端运行exe
如果你的需求是在部署IntraWeb服务的机器上运行exe,直接调用Win32API的ShellExecute即可,只需要调整路径获取逻辑,拿到wwwroot目录的正确路径:
- 先在单元引用中加入
IWInit、Winapi.ShellAPI - 示例代码:
var ExeFullPath: string; begin // gSC.ContentPath 即为IntraWeb默认的wwwroot目录绝对路径 ExeFullPath := IncludeTrailingPathDelimiter(gSC.ContentPath) + 'Application.exe'; // 若不需要在服务端显示exe界面,可将SW_SHOW替换为SW_HIDE后台运行 ShellExecute(0, 'OPEN', PChar(ExeFullPath), nil, nil, SW_SHOW); end;
注意事项:
- 若IntraWeb以Windows服务形态部署,需要给服务运行的账号配置对应exe的读取、执行权限
- 若以ISAPI模块部署在IIS中,需要给对应应用池的运行身份配置exe的访问权限
场景2:需要让访问站点的客户端用户本地启动exe
IntraWeb作为Web框架,服务端代码没有权限直接操作客户端本地程序,这是浏览器的安全限制,可选实现方案如下:
- 推荐方案:给目标exe注册自定义URL协议(比如
myapp://),你可以提前给所有客户端设备导入注册表项完成协议注册,之后在IntraWeb页面上放一个指向myapp://启动参数的链接,用户点击后就会唤起本地的exe程序。 - 兼容方案:如果是内网IE内核浏览器场景,可以将站点加入受信任列表后用ActiveX实现,但兼容性极差,不推荐使用。
注意:不要尝试用服务端的ShellExecute代码实现客户端启动效果,该操作只会在你的服务端机器上运行exe,用户侧看不到任何反应。
内容的提问来源于stack exchange,提问作者Amélie
相关产品推荐
相关产品推荐

