Asp.net mvc 使用互操作将word文档保存为pdf会导致COMException:命令失败

Asp.net mvc 使用互操作将word文档保存为pdf会导致COMException:命令失败,asp.net-mvc,iis,office-interop,w3wp,word-interop,Asp.net Mvc,Iis,Office Interop,W3wp,Word Interop,我有一个ASP.NET MVC应用程序,该应用程序池配置为作为自定义身份帐户运行,例如MyDomain\MyUser 从word docx文件创建pdf文件时出现问题:尝试将文件另存为pdf到应用程序文件夹中的临时文件夹时出现“COMException命令失败”:C:\inetpub\wwwroot\MyAspNetMvcApp\Data\Documents\Temp 我已将应用程序池自定义标识帐户(MyDomain\MyUser)添加到具有完全控制权限的应用程序文件夹中,但它不起作用,无法将p

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

从word docx文件创建pdf文件时出现问题:尝试将文件另存为pdf到应用程序文件夹中的临时文件夹时出现“COMException命令失败”:C:\inetpub\wwwroot\MyAspNetMvcApp\Data\Documents\Temp

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

我已经在服务器上调试了它,用它来处理app folder中的incomings文件系统事件,我可以看到,当使用Interop提供的SaveAs2方法时,服务器上的WINWORD.EXE被调用/执行,但使用的是登录到客户机上的域用户帐户,而不是使用应用程序池自定义标识帐户(MyDomain\MyUser),因此当尝试将新pdf文件写入C:\inetpub\wwwroot\MyAspNetMvcApp\Data\Documents\Temp时,会引发异常“COMException command failed”,因为它没有写入该文件的权限

我已将标识设置为Microsoft Word DCOM组件的“交互用户”

既然应用程序池自定义标识帐户有权写入该应用程序文件夹,我如何使用应用程序池自定义标识帐户强制执行互操作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;
}
public void ConvertToPDF(字符串myDocFile)
{
//myDocFile包含“C:\\inetpub\\wwwroot\\MyAspNetMvcApp\\Data\\Documents\\Temp\\myDocxFile.docx”
文档myDoc=GetMyDoc(myDocFile);
字符串myPdfFile=Path.Combine(Path.GetDirectoryName(myDocFile),Path.GetFileNameWithoutExtension(myDocFile)+“.pdf”);
//myPdfFile现在包含:“C:\\inetpub\\wwwroot\\MyAspNetMvcApp\\Data\\Documents\\Temp\\myPdfFile.pdf”
//如何使用应用程序池自定义帐户(运行w3wp.exe的同一帐户)强制执行下面的SaveAs2方法?

myDoc.SaveAs2(myPdfFile,WdSaveFormat.wdFormatPDF);//您的Microsoft office.Interop版本是什么?您使用的是Windows server吗?Microsoft不支持Windows server上的某些Microsoft office Interop。这是一个类似问题的链接:。您的Microsoft office.Interop版本是什么?您使用的是Windows server吗?Windows不支持某些Microsoft office InteropMicrosoft提供的服务器。这是与以下问题类似的案例的链接:。