我无法使用System.Diagnostics.Process.Start()以编程方式启动Access数据库(msaccess.mdb)。
这是场景:
G:
cd \ESVONIX
"C:\Program Files (x86)\Microsoft Office\Office14\msaccess.exe" "G:\ESVONIX\ESVONIX.mdb" /runtime
esvonix.mdb被编程为在startforms OnOpen Event中启动一些数据操作。 startform在数据库设置中设置。
现在是奇怪的部分:
但是:如果我从我的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中尝试了大量不同的设置,但结果始终相同,无论我的设置如何。
非常欢迎任何想法。 感谢
答案 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参数的组合(在高级设置中)