从命令行构建Access可执行文件?

时间:2013-01-22 17:46:44

标签: ms-access msbuild

我们有一个仍在生产中的旧版Access应用程序。我想至少有一个自动构建它。你能从命令行构建访问exe吗?

更好的是,不会有任何机会成为Access的MSBuild目标吗?

3 个答案:

答案 0 :(得分:5)

这适用于我2010年。需要一些时间来管理它。

Function makeAccde()
    Dim source, temp, target As String
    DoCmd.RunCommand acCmdCloseAll 
    source = CurrentProject.path & "\" & CurrentProject.name
    temp = CurrentProject.path & "\" & "_tmpCompile.accdb"
    target = Left(source, Len(source) - 1) & "e"  'you can also use "r"
    Dim db As New Access.Application
    DoCmd.RunCommand acCmdCompileAndSaveAllModules

    Set aFSO = CreateObject("Scripting.FileSystemObject")
    aFSO.CopyFile source, temp, True

    db.AutomationSecurity = msoAutomationSecurityLow
    db.SysCmd 603, temp, target
    db.Quit
    Kill temp
    Application.Quit ' if you do not quit current db, sometimes target file is corrupted.
End Function

答案 1 :(得分:3)

您可能可以编写Windows脚本,因此具有命令行功能。

但是,目前还不清楚为什么不使用工具菜单中的选项呢?它不像建立时间在这里需要很长时间。

菜单中用于将应用程序编译为访问可执行文件的选项可在此处找到:

在其20年历史中访问永远不会产生.exe文件,但是将应用程序编译为访问可执行文件的行为已经成为选择和选择约20年。

因此,您似乎混淆或混淆术语访问可执行文件(mde或现在的accde文件)和.exe文件。对于Access,它们肯定不是一回事。事实上,今天这样的.exe文件的概念确实没有实际意义。较旧的FoxPro分发工具简单地包装了运行时并在一个p代码系统前面推了一个.exe - 尽管有一个.exe文件扩展名,它实际上从来就不是真正的可执行文件。

但是,今天的MOST系统确实需要一个EXTENSIVE运行时系统。

所以请记住,就像过去使用.net甚至VB6一样,您将要求已编译的Access可执行文件在目标计算机上首先安装支持的运行时文件。然而,这种工作与当今行业中的大多数主流开发工具没有什么不同。

。因此,就像C#,vb.net或VB6甚至Java一样,我们行业中的许多主流工具都需要在目标机器上运行已编译的应用程序之前安装一组支持的运行时文件和库。就像VB6,vb.net,C#甚至Java(注意我说的是Java,而不是JavaScript),然后一旦在目标计算机上安装了运行时和支持库,那么通常可以使用简单的文件副本部署应用程序(xcopy开发)。因此,在这方面,Access与Java或.net大致相同。 (您不必安装可执行文件 - 但只需复制它,但这样的设置仅在安装了正确的支持运行时文件后才有效。)

请记住,Access的一个缺点是支持库是办公室的共享组件。因此,功能区库,PDF创建,图像渲染,拼写检查等都是Word,Excel,Access,PowerPoint等之间的所有共享代码库。

由于上述原因,如果安装了您正在使用的特定版本的office(和Access)的任何部分,那么将安装Access运行时作为现有办公室安装到SAME目录结构中安装。您无法更改此安装位置。注意反过来也是如此! - 如果直接将访问运行时安装到自定义中,那么将安装Excel,word和所有office程序以安装到SAME目录,以确定放置Access运行时文件的位置。如上所述,办公程序和Access之间共享组件数量相当大的原因是这种组合的一部分。

由于这种大的依赖性,除了运行时支持文件的固定直接位置之外,还会产生一些重要问题:

共享部件=只能安装一个版本的Excel或Word或Access的SAME办公室版本。因此,如果计算机ALREADY安装了相同的Office版本但是采用不同的位格式,则无法安装64位版本的Access运行时。这意味着如果计算机安装了32位Office,则无法安装64位版本的Access 2010运行时。 (但您可以安装2013运行时或2007年)。

此外,如果已安装Access(完整版或运行时支持版),则无法安装运行时的第二个副本 - 安装程序将使用EXISTING安装。

在一天结束时,上述所有结果意味着为Access安装的运行时文件将依赖于该版本的office,因此这种依赖性可能使Access应用程序的分发成为真正的挑战。不幸的是,虽然Access有一个编译器,它没有链接器,因此无法链接+获取这些依赖项并创建一个单独的dll库。如果没有此功能,则Access可执行文件需要将这些Office支持文件与Access运行时系统一起安装。

如果您需要或要求在对已安装的现有Office版本造成最小干扰的计算机上安装Access运行时,则建议采用商业安装程序以及Sagkey的一些脚本:

http://www.sagekey.com/installation_access.aspx

答案 2 :(得分:2)

a = CreateObject("Access.Application")
If a.SysCmd(603, PATH_TO_BXB_FILE, PATH_TO_BXE_FILE) = 0 Then
    MsgBox("Fail to compile to MDB file")
End If

syscmd的603论证没有记载。它会因多种原因而失败,例如,如果您不使用单独的MS Access实例,则在VBA下运行会失败。在this中,失败的其他原因如下:

  
      
  • 用于在单独的Access数据库中运行的VBA代码(与解决方案数据库分开);
  •   
  • 解决方案数据库关闭时;和
  •   
  • 当解决方案数据库中的VBA代码中没有语法错误时。
  •   

请注意,即使创建成功,生成的mde或accde也可能无法在另一台计算机上运行。在大多数情况下,我发现Access 2010是最容忍的,但是,最终会出现令人烦恼的安全警告。