微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Interop将Word文档另存为pdf导致COMException:命令失败

如何解决使用Interop将Word文档另存为pdf导致COMException:命令失败

我有一个ASP.NET MVC应用程序,该应用程序池配置为作为自定义身份帐户运行,例如MyDomain \ MyUser。

从Word docx文件创建pdf文件时出现问题:尝试将pdf文件另存为应用程序文件夹中的临时文件夹时,出现“ COMException命令失败”:C:\ inetpub \ wwwroot \ MyAspNetMvcApp \数据\文档\临时

我已将具有应用程序池自定义身份帐户(MyDomain \ MyUser)添加到具有完全控制权限的应用程序文件夹中,但是它不起作用,无法将pdf保存到应用程序文件夹中。

我已经在服务器上使用process monitor对其进行了调试,以处理来自应用程序文件夹的传入文件系统事件,并且可以看到,当使用由Interop提供的SaveAs2方法时,将调用/执行服务器上的WINWORD.EXE,但是使用在客户端计算机中登录的域用户帐户,而不是使用应用程序池自定义身份帐户(MyDomain \ MyUser),因此在尝试将新的pdf文件写入C:\ inetpub \ wwwroot \ MyAspNetMvcApp \ Data \ Documents \临时会引发异常“ COMException命令失败”,因为它没有写权限。

我已将Identity设置为Microsoft Word DCOM组件的“交互式用户”。

由于应用程序池自定义身份帐户有权写入该应用程序文件夹,因此如何强制使用应用程序池自定义身份帐户执行Interop SaveAs2方法

下面的代码段:

public void ConvertToPDF(string myDocFile)
{
    // myDocFile contains "C:\\inetpub\\wwwroot\\MyAspNetMvcApp\\Data\\Documents\\Temp\\myDocxFile.docx"
    Document myDoc = GetMyDoc(myDocFile);

    string myPdfFile = Path.Combine(Path.GetDirectoryName(myDocFile),Path.GetFileNameWithoutExtension(myDocFile) + ".pdf");

    // myPdfFile Now contains: "C:\\inetpub\\wwwroot\\MyAspNetMvcApp\\Data\\Documents\\Temp\\myPdfFile.pdf"

    // How can I force below SaveAs2 method to execute using the application pool custom account (the same account which runs w3wp.exe)?
    myDoc.SaveAs2(myPdfFile,WdSaveFormat.wdFormatPDF); // <--- HERE IT CRASHES: COMException command Failed!!
    
    ...
}

public Document GetMyDoc(object docfile)
{
   // docFile contains "C:\\inetpub\\wwwroot\\MyAspNetMvcApp\\Data\\Documents\\Temp\\myDocxFile.docx"

   Application wApp = new Microsoft.Office.Interop.Word.Application();
   Document myDoc = wApp.Documents.Open(ref docFile);
   
   return myDoc;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。