You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MS Access 2003表单中嵌入EXE等文件并运行?

MS Access 2003 嵌入OLE对象(Packager Shell类)实现运行/写入磁盘

问题背景

处理老旧.mdb项目,需将.txt、.exe、.pdf等文件以OLE对象(Packager Shell类)嵌入数据库,无需用户额外准备文件,直接从Access完成两个操作:

  • 将嵌入的文件写入指定路径
  • 直接运行嵌入的EXE文件(如自制的BMH.exe)
    已尝试基础OLE控件代码,但未实现预期功能。

已尝试代码

Private Sub Form_Load()
    'Me.OLEUnbound2.Application.Run  
    Dim obj As Object
    Set obj = Me.OLEBound1.Object
    'obj.DoVerb (acPrimaryVerb)
End Sub

解决方案

1. 将嵌入的OLE文件写入指定路径

利用Packager Shell对象的Extract方法,可直接把嵌入的文件提取到目标路径:

Private Sub cmdExtractFile_Click()
    Dim pkgObj As Object
    Dim targetPath As String
    
    ' 指定文件输出路径(需确保路径已存在)
    targetPath = "C:\Temp\BMH.exe"
    
    ' 获取OLE控件中的Packager对象
    Set pkgObj = Me.OLEBound1.Object
    
    ' 提取文件到指定路径
    pkgObj.Extract targetPath
    
    Set pkgObj = Nothing
    MsgBox "文件已提取至:" & targetPath, vbInformation
End Sub

2. 直接运行嵌入的EXE文件

先将文件提取到系统临时目录,运行后自动清理临时文件:

Private Sub cmdRunEXE_Click()
    Dim pkgObj As Object
    Dim tempPath As String
    Dim shellObj As Object
    
    ' 生成临时文件路径(使用系统临时目录)
    tempPath = Environ("TEMP") & "\BMH_Temp.exe"
    
    ' 获取OLE控件中的Packager对象并提取到临时路径
    Set pkgObj = Me.OLEBound1.Object
    pkgObj.Extract tempPath
    
    ' 启动EXE文件
    Set shellObj = CreateObject("WScript.Shell")
    shellObj.Run tempPath, vbNormalFocus
    
    ' 释放对象
    Set pkgObj = Nothing
    Set shellObj = Nothing
    
    ' 延迟2秒后删除临时文件(可根据EXE启动速度调整延迟时长)
    Application.OnTime Now() + TimeValue("00:00:02"), "DeleteTempFile", , True
End Sub

' 辅助删除临时文件的过程
Private Sub DeleteTempFile()
    Dim tempPath As String
    tempPath = Environ("TEMP") & "\BMH_Temp.exe"
    
    If Dir(tempPath) <> "" Then
        Kill tempPath
    End If
End Sub

注意事项

  • 确保OLE控件绑定的字段为OLE对象类型,嵌入文件时选择"由文件创建"并勾选"显示为图标",对象类型需为Packager Shell
  • 运行代码时需保证Access有目标路径的读写权限
  • 临时文件删除的延迟时间需根据EXE实际启动速度调整,避免文件被占用无法删除

内容的提问来源于stack exchange,提问作者Johnydev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 23:45:59