C# 最终产品用户可以';无法创建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

我正在为内部部署创建一个wpf应用程序

使用该软件的用户在尝试创建excel互操作实例时遇到以下错误

检索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系统找不到指定的文件

通常,此错误只由以下几个问题引起

  • 最近的Windows更新
  • 分区问题的和或问题
  • 比特度问题(确定终端计算机上安装的Office以及编译应用程序的依据)
  • 我之前问过你的目标是什么,因为你有一些代码检查电脑是否是64位的,你已经遇到了一些问题。这将导致我在创建Excel实例时遇到一些小问题

    我对您的确切问题的建议和解决方案是因为终端计算机是32位的,因此为x86/32位编译应该可以解决这个问题


    最后,您可以删除旧代码,因为不再需要它。

    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,但我认为其中一个“老板”想要使用来自某些专横的原因的旧格式?