C# 最终产品用户可以';无法创建excel互操作实例
我正在为内部部署创建一个wpf应用程序 使用该软件的用户在尝试创建excel互操作实例时遇到以下错误C# 最终产品用户可以';无法创建excel互操作实例,c#,excel,com,interop,file-not-found,C#,Excel,Com,Interop,File Not Found,我正在为内部部署创建一个wpf应用程序 使用该软件的用户在尝试创建excel互操作实例时遇到以下错误 检索CLSID为(…)的组件的COM类工厂失败,原因是以下错误:80070002系统找不到指定的文件 捕获错误的部分如下所示 try { _excelApplication = new Microsoft.Office.Interop.Excel.Application(); GetWindowThreadProcessId(_excelApplication.Hwnd, out
检索CLSID为(…)的组件的COM类工厂失败,原因是以下错误:80070002系统找不到指定的文件
捕获错误的部分如下所示
try
{
_excelApplication = new Microsoft.Office.Interop.Excel.Application();
GetWindowThreadProcessId(_excelApplication.Hwnd, out ExcelAppProcessId);
_excelApplication.ScreenUpdating = false;
}
catch(Exception e)
{
//TODO Move message box to parents
MessageBox.Show($"Termination Error: Could not open Excel Application: {e.Message}");
Environment.Exit(110);
}
以前,同一个用户在尝试打开Access时遇到了问题(不记得确切的错误是什么),我实现了以下方法来修复它
try
{
//MessageBox.Show($"OS: {EnvironmentFunctions.is64BitOperatingSystem} Process: {EnvironmentFunctions.is64BitProcess}");
if (EnvironmentFunctions.is64BitOperatingSystem && !EnvironmentFunctions.is64BitProcess)
{
string PathValue = "";
string sAdd = "";
string strCommonFiles =
Environment.GetEnvironmentVariable("CommonProgramFiles(x86)");
sAdd = ";" + strCommonFiles + "\\microsoft shared\\DAO";
PathValue = Environment.GetEnvironmentVariable("Path");
PathValue += sAdd;
Environment.SetEnvironmentVariable("path", PathValue);
}
_accessApplication = new Microsoft.Office.Interop.Access.Application();
GetWindowThreadProcessId(_accessApplication.hWndAccessApp(), out AccessAppProcessId);
}
catch
{
MessageBox.Show("Termination Error: Could not open Access Application");
Environment.Exit(110);
}
如果没有Excel互操作,会有类似的解决方案吗
关于用户的说明:他们是少数几个仍在运行Windows7的用户之一
由于以下错误,检索CLSID为(…)的组件的COM类工厂失败:80070002系统找不到指定的文件
通常,此错误只由以下几个问题引起
最后,您可以删除旧代码,因为不再需要它。Office COM interop已过时,不应再使用。它具有COM互操作的所有常见问题。还有一些是自己的,包括但不限于:1。它需要一个交互式会话。对于桌面应用程序来说,这不是问题,但是对于服务和任何在服务(如Web应用程序)中运行的东西来说,这是一个严重的问题()。2.它需要在正在运行的计算机上安装office。因为它所做的只是远程处理office的一个实例。只是部分相关,但异常处理是我的一个烦恼,而你的是糟糕的。您可以捕获异常—这是一种非常广泛的方法—并且只公开或记录消息—如果有那么多的话。以下是我经常链接的两篇文章:|“Office COM互操作”是否与“Microsoft.Office.interop.Excel”(或其子集)相同?我很确定Office安装在他们的计算机上(他们打开并使用Office应用程序),但我会仔细检查,确保它没有安装在与本地硬盘不同的目录中。@Mandelbrotter是的,“Microsoft.Office.Interop”是Office COM互操作。|关于找不到的文件:IIRC,使用COM您必须注册组件,而过于现代的Office版本可能无法做到这一点也可能是配股COM失败的原因有很多,我们访问.NET的一个主要原因是:)找到了一些旧的解决方案:1。是将COM互操作调用放入具有固定二进制性的助手进程,主进程通过任何IPC方法与之对话。() 2. 正在对DLL导入(复数形式)()进行包装当然,我的建议仍然是使用OpenXMLSDK,但我认为其中一个“老板”想要使用来自某些专横的原因的旧格式?