无法上传 Ppt 并在 IIS 服务器中读取
Not Able To upload Ppt and read in IIS Server
我正在上传 PPT 文件,我正在将 ppt silde 转换为 images.When 我是 运行 在 visual studio 它工作正常但是当我将代码发布到 IIS 服务器时我是得到跟随错误
Retrieving the COM class factory for component with CLSID
{91493441-5A91-11CF-8700-00AA0060263B} failed due to the following
error: 80070005 Access is denied. (Exception from HRESULT: 0x80070005
(E_ACCESSDENIED)).
代码:
Microsoft.Office.Interop.PowerPoint.Application PowerPoint_App = new Microsoft.Office.Interop.PowerPoint.Application();
Microsoft.Office.Interop.PowerPoint.Presentations multi_presentations = PowerPoint_App.Presentations;
Microsoft.Office.Interop.PowerPoint.Presentation presentation = multi_presentations.Open(filePath, MsoTriState.msoFalse, MsoTriState.msoFalse, MsoTriState.msoFalse);
配置 DCOM
转到开始 -> 运行。
键入 DCOMCNFG。 (这将加载 "Component Services")
转到组件服务 -> 计算机 -> 我的电脑 -> DCOM 配置
-> Microsoft Office Power point
右键单击 select 属性。
Select 安全选项卡。
在启动和激活权限
- select 自定义并按“编辑”按钮。
- 按添加按钮 select "Network Service" 帐户。
- 授予本地启动和本地激活权限
单击确定按钮,然后测试您的应用程序,它现在应该可以正常工作了。
您应该授予 "This User" 权限
然后在 COM+ 设置中获取登录凭据。
None 网络上的答案对我在 Windows Server 2012 R2 (Azure) 上的相同问题有用。这是适用于所有服务器的缩小范围的解决方案。
- 已在每台服务器上安装 Office 并激活产品
- 在 C:\Windows\SysWOW64\config\systemprofile\Desktop 创建了文件夹 'Desktop'(64 位 OS)
- 在 IIS 中,ApplicationPool 标识从 'ApplicationPoolIdentity' 更改为 'LocalSystem'。
就是这样,我能够将幻灯片转换成图像。
源代码
如果您对我使用的代码感兴趣:
Application pptApplication = new Application();
Microsoft.Office.Interop.PowerPoint.Presentation pptPresentation = pptApplication.Presentations.Open2007(Server.MapPath("~/tempslides/pptfilename.pptx"), MsoTriState.msoFalse, MsoTriState.msoFalse, MsoTriState.msoFalse);
List<string> files = new List<string>();
for (int i = 1; i <= pptPresentation.Slides.Count; i++)
{
pptPresentation.SaveCopyAs(serverPath + randomId, PpSaveAsFileType.ppSaveAsPNG, MsoTriState.msoTrue);
files.Add(Server.MapPath("~/tempslides") + "/slide" + i + ".PNG");
}
pptPresentation.Close();
对于运行以上代码,您需要在您的项目中添加对互操作库的引用。
希望这可以帮助您节省时间。
我已按照以下操作解决问题。
1) 转到控制面板 -> 管理工具 -> 组件服务 -> 计算机 -> 我的电脑 -> DCOM 配置 -> Microsoft Office Powerpoint 右键单击和 select 属性。
Select 安全选项卡。
并为启动和激活权限、访问权限和配置权限的所有三个访问权限提供了对 IIS_IUSR 的完整访问权限。
2) 将应用程序池标识设置为 "LocalSystem"
3) 为部署 Microsoft.Office.Interop Dll 的文件夹提供对 IIS_IUSR 的完全访问权限
例如:C:\Program Files (x86)\Microsoft Visual Studio 12.0\Visual Studio Tools for Office\PIA\Office15
我正在上传 PPT 文件,我正在将 ppt silde 转换为 images.When 我是 运行 在 visual studio 它工作正常但是当我将代码发布到 IIS 服务器时我是得到跟随错误
Retrieving the COM class factory for component with CLSID {91493441-5A91-11CF-8700-00AA0060263B} failed due to the following error: 80070005 Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)).
代码:
Microsoft.Office.Interop.PowerPoint.Application PowerPoint_App = new Microsoft.Office.Interop.PowerPoint.Application();
Microsoft.Office.Interop.PowerPoint.Presentations multi_presentations = PowerPoint_App.Presentations;
Microsoft.Office.Interop.PowerPoint.Presentation presentation = multi_presentations.Open(filePath, MsoTriState.msoFalse, MsoTriState.msoFalse, MsoTriState.msoFalse);
配置 DCOM
转到开始 -> 运行。
键入 DCOMCNFG。 (这将加载 "Component Services")
转到组件服务 -> 计算机 -> 我的电脑 -> DCOM 配置 -> Microsoft Office Power point
右键单击 select 属性。
Select 安全选项卡。
在启动和激活权限
- select 自定义并按“编辑”按钮。
- 按添加按钮 select "Network Service" 帐户。
- 授予本地启动和本地激活权限 单击确定按钮,然后测试您的应用程序,它现在应该可以正常工作了。
您应该授予 "This User" 权限 然后在 COM+ 设置中获取登录凭据。
None 网络上的答案对我在 Windows Server 2012 R2 (Azure) 上的相同问题有用。这是适用于所有服务器的缩小范围的解决方案。
- 已在每台服务器上安装 Office 并激活产品
- 在 C:\Windows\SysWOW64\config\systemprofile\Desktop 创建了文件夹 'Desktop'(64 位 OS)
- 在 IIS 中,ApplicationPool 标识从 'ApplicationPoolIdentity' 更改为 'LocalSystem'。
就是这样,我能够将幻灯片转换成图像。
源代码
如果您对我使用的代码感兴趣:
Application pptApplication = new Application();
Microsoft.Office.Interop.PowerPoint.Presentation pptPresentation = pptApplication.Presentations.Open2007(Server.MapPath("~/tempslides/pptfilename.pptx"), MsoTriState.msoFalse, MsoTriState.msoFalse, MsoTriState.msoFalse);
List<string> files = new List<string>();
for (int i = 1; i <= pptPresentation.Slides.Count; i++)
{
pptPresentation.SaveCopyAs(serverPath + randomId, PpSaveAsFileType.ppSaveAsPNG, MsoTriState.msoTrue);
files.Add(Server.MapPath("~/tempslides") + "/slide" + i + ".PNG");
}
pptPresentation.Close();
对于运行以上代码,您需要在您的项目中添加对互操作库的引用。
希望这可以帮助您节省时间。
我已按照以下操作解决问题。
1) 转到控制面板 -> 管理工具 -> 组件服务 -> 计算机 -> 我的电脑 -> DCOM 配置 -> Microsoft Office Powerpoint 右键单击和 select 属性。 Select 安全选项卡。 并为启动和激活权限、访问权限和配置权限的所有三个访问权限提供了对 IIS_IUSR 的完整访问权限。
2) 将应用程序池标识设置为 "LocalSystem"
3) 为部署 Microsoft.Office.Interop Dll 的文件夹提供对 IIS_IUSR 的完全访问权限
例如:C:\Program Files (x86)\Microsoft Visual Studio 12.0\Visual Studio Tools for Office\PIA\Office15