C ++非托管DLL无法在IIS 7.5上启动Excel

时间:2012-01-30 10:49:11

标签: c# excel winapi automation iis-7.5

我们有一个从Excel读取数据的C ++ Win32 DLL。

应用程序使用以下行创建应用程序:

xl.CreateInstance(L"Excel.Application");

我想在.NET项目中使用此DLL,因此我构建了一个C ++ / CLI包装器,并在C#Web应用程序上引用了包装器DLL。

Win32(非托管) - > C ++ / CLI(托管) - > C#

Web应用程序在Visual Studio集成Web服务器上运行良好,但是当我部署到IIS时,它在上面的行上失败并返回错误“无效指针”。

我认为这可能是一个权限问题所以我冒充了Web应用程序,但它没有用。看起来IIS不允许从非托管C ++ DLL打开Excel。我可以从C#打开,但有很多C ++代码可以阅读电子表格,我不想再写它了。

我正在运行IIS 7.5,而应用程序池允许Win32应用程序。

你能帮帮我吗?

致以最诚挚的问候,

1 个答案:

答案 0 :(得分:1)

MS不支持在服务器上使用Office Interop - 请参阅http://support.microsoft.com/default.aspx?scid=kb;EN-US;q257757#kb2

由于Windows Vista MS引入了一些与安全相关的措施,这些措施阻止Windows服务(IIS只是一种特殊情况)做“类似桌面”的事情......这意味着你必须规避几项安全措施(单独模仿不会削减它!)让它发挥作用(不推荐!)。

集成的VS Web服务器不会模拟IIS关于权限等的行为。

要在服务器场景中处理Excel,有几个选项(免费和商业):

我可以推荐Aspose.CellsFlexcel ...没试过SpreadsheetGear但是听到+读了很多关于它的好东西......

免费选项(仅适用于较新的xlsx格式!)例如OpenXML 2 from MSEPPlus