我有一个ASP.NET 2.0 web应用程序,它应该上传一个ppt文件,然后将其幻灯片提取到图像中。为此,我导入了office.dll和Microsoft.Office.Interop.PowerPoint.dll程序集,并编写了以下代码
public static int ExtractImages(string ppt, string targetPath, int width, int height)
{
var pptApplication = new ApplicationClass();
var pptPresentation = pptApplication.Presentations.Open(ppt, MsoTriState.msoTrue, MsoTriState.msoFalse, MsoTriState.msoFalse);
var slides = new List<string>();
for (var i = 1; i <= pptPresentation.Slides.Count; i++)
{
var target = string.Format(targetPath, i);
pptPresentation.Slides[i].Export(target, "jpg", width, height);
slides.Add(new FileInfo(target).Name);
}
pptPresentation.Close();
return slides.Count;
}如果我在本地机器、asp.net或可执行文件中运行这段代码,它就会运行得非常完美。但是,如果我尝试在生产服务器中运行它,则会得到以下错误:
System.Runtime.InteropServices.COMException (0x80004005):PowerPoint无法打开文件。在Microsoft.Office.Interop.PowerPoint.Presentations.Open(String FileName,MsoTriState ReadOnly,MsoTriState Untitled,MsoTriState WithWindow,at PPTImageExtractor.PptConversor.ExtractImages(String caminhoPpt,String caminhoDestino,Int32 altura,Int32 altura,String caminhoThumbs,Int32 larguraThumb,Int32 alturaThumb,Boolean ( context)
该进程正在与用户NT权限\网络服务一起运行。IIS被配置为使用匿名身份验证。匿名用户是管理员,我将其设置为允许应用程序运行而不必担心权限。
在我的开发机器中,我有office 2010 beta1。我也用office 2007在pc机上测试了可执行文件。如果我从服务器中的可执行文件运行代码,并且安装了office 2003,那么它将完美地运行。
为了确保权限不会出现任何问题,服务器中的每个人都可以完全访问网站。该网站运行在IIS7和经典模式。
我还听说office有一个API可以做到这一点,但是我找不到任何关于它的东西。我不介意使用DLLImport来做我必须做的事情,我可以在web服务器上安装开放办公室。不要担心重写这个方法,只要参数相同,一切都会正常工作。
谢谢你的帮助。
发布于 2010-05-19 06:09:32
永远不要使用来自ASP.NET应用程序的Office。见办公服务器端自动化的几点思考。
但是,如果您没有其他选择,那么在Windows 2008上,需要创建以下目录才能使其工作:
Windows2008Server: C:\Windows\SysWOW64\config\systemprofile\Desktop Windows2008Server x86: C:\Windows\System32\config\systemprofile\Desktop
发布于 2010-04-17 18:01:29
当考虑在服务器上使用Office自动化时,您可能希望阅读下面KB文章中的信息。
http://support.microsoft.com/kb/257757
以上链接中的关键词组
微软目前不推荐、也不支持任何无人值守、非交互式客户端应用程序或组件(包括ASP、ASP.NET、DCOM和NT服务)的Microsoft应用程序自动化,因为在此环境中运行Office时,Office可能会出现不稳定的行为和/或死锁。
我可以证实上面的话是真的,而不仅仅是MS试图阻止你.
发布于 2014-06-04 10:06:59
在我的情况下(将演示转换为视频,而且我对打开的东西也有类似的问题),这有助于:
创建以下目录:
C:\Windows\SysWOW64\config\systemprofile\Desktop
C:\Windows\System32\config\systemprofile\Desktop (我没有这个)
我的操作系统Windows 2012 R2标准
https://stackoverflow.com/questions/2653740
复制相似问题