间歇性文件未找到异常检索 COM class 使用 NetOffice 创建 Excel 文件 (C#)

Intermittent File Not Found Exception retrieving COM class using NetOffice to create Excel File (C#)

我有一个程序 运行 在安装了 Office 2007 的 SBS 2008 服务器上运行,并在通过电子邮件发送的 Excel 文件中创建报告。我正在使用 NetOffice 创建 Excel 文件,它在大多数情况下都有效。但是,它经常抛出“未找到文件”异常并失败。

完整的例外是:

Inner Exception:System.IO.FileNotFoundException: Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 8007007e The specified module could not be found. (Exception from HRESULT: 0x8007007E). at System.Runtime.Remoting.RemotingServices.AllocateUninitializedObject(RuntimeType objectType) at System.Runtime.Remoting.Activation.ActivationServices.CreateInstance(RuntimeType serverType) at System.Runtime.Remoting.Activation.ActivationServices.IsCurrentContextOK(RuntimeType serverType, Object[] props, Boolean bNewObj) at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) at System.Activator.CreateInstance(Type type, Boolean nonPublic) at System.Activator.CreateInstance(Type type) at NetOffice.COMObject.CreateFromProgId(String progId, Boolean factoryAddObject) Source: NetOffice Stack Trace: at NetOffice.COMObject.CreateFromProgId(String progId, Boolean factoryAddObject) at NetOffice.ExcelApi.Application..ctor(Boolean enableProxyService) at NetOffice.ExcelApi.Application..ctor() at CCDExceptionReport.Program.Main(String[] args) Target Site: Void CreateFromProgId(System.String, Boolean)

如果我立即重新运行程序,它将总是运行成功。

我试过全部重建,替换服务器上的文件,在 VS 2019 和 2017 中编译。

我终于解决了这个问题。

我遵循了有关根据需要创建桌面文件夹的建议,此处进行了说明: Why does systemprofile need Desktop folder to open excel file

我使用 dcomcnfg.exe 并设置了 Microsoft Excel 应用程序属性的安全性以包括计划任务 运行 作为的用户。

都没用。

最后,侥幸地,我仔细检查了安全性,然后单击了“身份”选项卡。我将其更改为 "The launching user" 而不是 "The interactive user",现在我所有使用 NetOffice 插件的程序都将通过任务管理器运行。

我认为所有三个要素都需要到位,即桌面文件夹、适当的安全性和适当的身份设置。

我要进入安全和身份设置 运行 dcomcnfg.exe 扩展的 DCOM 配置 右键单击 Microsoft Excel 应用程序 单击属性 已编辑的安全选项卡 编辑身份