使用 PHP 部署 MATLAB Compiler COM 组件时设置 IIS 权限

Setting IIS permissions when deploying MATLAB Compiler COM Component using PHP

我在使用 PHP 运行ning 在 IIS 上创建的网站中使用 COM 组件时遇到困难。这看起来像是一个权限问题,但在使用权限玩了几天之后,我离它的工作还差得很远,所以我在寻找想法。

设置是 Windows Server 2012 R2,ISS 8.0,PHP 7.0。 COM 组件是使用 MATLAB Compiler SDK R2017b 创建的。 一切都是 64 位的。

COM 组件可以从 Python 使用

正确执行
import win32com.client
obj = win32com.client.Dispatch("AddMatrixTestCOM.MATLABTest.1_0")
ans = obj.addmatrix(1,100,3,4)
print ans

因此,COM 组件和相应的 MATLAB 组件运行时 (MCR) 是 registered/installed 正确的。 (MCR 本质上是一个由 COM 组件调用的 运行 时间引擎。它由各种 DLL 组成。)

为了测试从 PHP 调用 COM 组件,我编写了自己的 COM 组件(即不使用 MATLAB)。可以使用

成功调用
$my_dll = new COM('SimpleAddCOM');
$outvar = $my_dll->add_ints(1, 2);
echo $outvar;

因此所有适当的 php.ini 设置都已到位以调用 COM。 (COM组件创建于Visual Studio2015年,服务器已安装相关部署库。)

但是,我无法使用以下命令,

$my_dll = new COM('AddMatrixTestCOM.MATLABTest.1_0');
$outvar = $my_dll->addmatrix(1, 100, 3, 4);
echo $outvar;

第一行抛出错误:Failed to create COM object 'AddMatrixTestCOM.MATLABTest.1_0': ClassFactory cannot supply requested class

具体错误号为:2147746065

我相信正在找到 COM 组件,因为如果我尝试实例化一个不存在但无法克服(或真正理解)cannot supply requested class 部分的组件,错误会有所不同。

我已授予各种用户对包含 MCR 和 COM 组件的目录的完全权限。 (基于具有与此类似主题的各种 Stack Overflow questions/answers,我首先授予权限 IIS_IUSRS,然后是 IUSR,然后是 NETWORK SERVICES,最后添加 Everyone。 None 有效。)

无法将 IIS 和我的 COM 组件粘合在一起,我错过了什么?

编辑 这里有更多信息:

我已授予 DefaultAppPoolmynameIWPD_1(myname) 对包含我的 COM dll 和 MCR 的目录的完全权限。

在我放弃 IIS 并回到 linux 主机之前,有人有什么我可以尝试的吗?

这并不能真正回答我的问题,但可以帮助其他人。

我最终将我的应用程序池的 Load User Profile 设置更改为 true。这会在 C:\Users 下为 App Pool 使用的帐户创建一个配置文件,并为 App Pool 用户提供适当的访问权限。然后我安装了 MATLAB MCR 并将我的 dll 放在该用户配置文件的 Documents 目录中的目录中。

我还没有调查这对安全的影响,但它让我度过了没有任何代码工作的困境。