本帖最后由 andh1222 于 2014-11-14 11:35:09 编辑

解决方案 »

  1.   

    在网上查了一下这个错误现象【com.jacob.com.ComFailException: Can't co-create object】
    都说是没有关闭线程引起的【ComThread.Release();】
    但是我的测试代码中已经关闭了线程。测试代码如下:
        ComThread.InitSTA();
        ActiveXComponent app = new ActiveXComponent("Excel.Application");
        app.setProperty("Visible", false);
        Dispatch offices = app.getProperty("Workbooks").toDispatch();
        Dispatch office = Dispatch.call(offices, "Open", inputFile, false, true).toDispatch();
        Dispatch.call(office, "ExportAsFixedFormat", 0, pdfFile);
        Dispatch.call(office, "Close", false);
        app.invoke("Quit");
        ComThread.Release();
      

  2.   

    今天又测试了一下,远程启动Tomcat服务,Was服务。①在Was服务中
    客户端使用远程桌面连接到服务器上,测试Servlet 结果OK,
    客户端关闭远程连接,测试Servlet 结果Error。
    ②在Tomcat服务中,一直OK。Was服务使用了64位DLL,Tomcat服务使用了32位DLL。
    特别奇怪的现象,怀疑是跟64位的DLL访问权限的问题。哪位使用过64位DLL Com组件的请帮忙分析一下什么问题。
      

  3.   

    终于搞定这个问题了。
    是64位系统下Office使用权限的问题,只要修改Office的访问权限就可以了。
    ※在Tomcat服务器中不发生这个问题,在32位系统中也不发生这个问题。解决方法:
    在命令行中执行Dcomcnfg命令,
    找到「Console Root」→「Component Services」→「Computers」→「My computer」→「DCOM config」
    选择Excel或者Word的属性Tab【identity】,将【the launching user】→【This user】
    用户名使用管理员账户【administrator】