使用System.Diagnostics.Process.Start()启动时MS Access无法打开数据库

时间:2015-03-28 16:29:16

标签: vb.net process ms-access-2010

我无法使用System.Diagnostics.Process.Start()以编程方式启动Access数据库(msaccess.mdb)。

这是场景:

  1. vb.net aspx页面启动[installpath] \ cmd \ ERPImport.exe
  2. ERPImport.exe从SQL服务器db(pgmname,params,execdir)读取设置,再次使用process.start()启动批处理文件[installpath] \ cmd \ Import.cmd
  3. Import.cmd仅包含以下3行:
  4. G: cd \ESVONIX "C:\Program Files (x86)\Microsoft Office\Office14\msaccess.exe" "G:\ESVONIX\ESVONIX.mdb" /runtime

    esvonix.mdb被编程为在startforms OnOpen Event中启动一些数据操作。 startform在数据库设置中设置。

    现在是奇怪的部分:

    • 如果我从Windows资源管理器中双击启动Import.cmd,一切都很好
    • 如果我从命令行启动ERPImport.exe(连接字符串作为其预期的参数),它可以正常工作

    但是:如果我从我的vb.net页面启动ERPImport.exe,它将正确启动Import.cmd,Import.cmd将启动msaccess.exe(我可以在taskmgr中看到)。但是,Access不会打开数据库(没有创建ldb文件)并且不会开始处理。它徘徊在"在taskmgr中使用0 cpu时间。从taskmgr中杀死msaccess.exe后,其余的工作正常:Import.cmd完成,ERPImport完成,aspx页面显示结果。

    我在process.startinfo中尝试了大量不同的设置,但结果始终相同,无论我的设置如何。

    非常欢迎任何想法。 感谢

1 个答案:

答案 0 :(得分:1)

从完整的Office安装更改为Access Runtime后,问题仍然存在,即使在调用Access时没有/ runtime参数也是如此。 但是,问题消失了,并且在命令行中的数据库名称之后使用命令行切换/保存正确调用和处理了Access。

更新 - 解决了 不幸的是,/ safe参数(请求以安全模式启动Access)并没有解决问题。添加参数后,该过程确实运行了一次,然后又回到了之前的行为。

解决方案最终是将ApplicationPool设置更改为" LoadUserProfile = true"。关于此参数的SO有很多问题。在我的情况下,确切的原因尚不清楚,但如果它有效......

2017年7月11日更新 不同用户环境中的相同问题。这次是Windows 2012 Server。 调用msaccess.exe和将应用程序池设置为LoadUserProfile = true时,安装程​​序使用/ safe参数的组合(在高级设置中)