1.在本机可以正常导出,IIS发布后导出失败!报错信息是:检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005 拒绝访问。
2.每导出一次word就会增加一个WPS.exe或者WINWORD.exe进程(取决于你使用办公软件),如果杀掉进程只能导出一次,第二次导出就失败。报错信息是:COM对象与基础的RCW分开后就不能再使用。
第一条可以归结为:环境配置问题;第二条可以归结为:杀掉word.exe进程问题
以下是是这两个问题的解决办法:
一、环境配置问题
1.在服务机上安装Microsoft Office 2013(与引用的插件版本相对应,
我引用的Microsoft.Office.Interop.Word 插件版本是15.0.4797.1003,对应的word版本是Microsoft Office 2013。);
2.配置计算机相应word的DCOM权限
1)在"开始"- >"运行"中输入dcomcnfg.exe启动"组件服务";
2)依次双击"组件服务"- >"计算机"- >"我的电脑"- >"DCOM配置";
3)在"DCOM配置"中找到"Microsoft word应用程序",在它上面点击右键,然后点击"属性",弹出"Microsoft word应用程序属性"对话框;
4)点击"标识"标签,选择"交互式用户";
5)点击"安全"标签,在"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加一个"NETWORK SERVICE"用户(注意要选择本计算机名),并给它赋予"本地启动"和"本地激活"权限;
6)依然是"安全"标签,在"访问权限"上点击"自定义",然后点击"编辑",在弹出的"安全性"对话框中也填加一个"NETWORK SERVICE"用户,然后赋予"本地访问"权限。
3.在web.config中使用身份模拟
在
4.在服务机上安装WPS Office专业版(如果你不使用WPS,这一步可以跳过),
一定要安装专业版的WPS,个人版不能导出,原因是个人版的WPS缺少PIA 插件,如果非要使用个人版,Kingsoft Office PIA下载地址可参照以下链接(还没有亲测,最好使用专业版):
http://download.csdn.net/download/yutiedun/9366829
二、杀掉进程问题。
问题描述:每预览一次PDF就会增加两个wps.exe进程(导出word模板和word转pdf各增加一个进程),如果杀掉进程只能导出一次,第二次导出就失败。
解决办法:
1.初始化时需要实例化一个Word应用程序变量
在方法内需要重新实例化一个Word应用程序变量(以下为wordApp),具体代码如下:
Microsoft.Office.Interop.Word._Application wordApp = null;//Word应用程序变量
if (wordApp == null)//一定要判断wordApp 是否为空
{
wordApp = new Application() {
DisplayAlerts= WdAlertLevel.wdAlertsNone
};
}
2.释放内存
1)生成word后释放内存
object IsSave = true;
missing = System.Reflection.Missing.Value;
wordApp.Quit(ref IsSave, ref missing, ref missing);//退出程序,相当于关闭word
System.Runtime.InteropServices.Marshal.ReleaseComObject(wordApp); //释放内存
wordApp = null;//内存释放完成后,切记要将wordApp 置为空,很重要!
这样,这两个问题就解决了!