Установка разрешений IIS при развертывании COM-компонента компилятора MATLAB с использованием переполнения стека

У меня возникают трудности с использованием COM-компонента на веб-сайте, созданном с использованием PHP, работающего на IIS. Это похоже на проблему с разрешениями, но после нескольких дней игры с разрешениями я уже не приблизился к тому, чтобы заставить его работать, поэтому ищу идеи.

Это 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 и соответствующее время выполнения компонента (MCR) MATLAB правильно зарегистрированы / установлены. (MCR — это, по сути, механизм времени выполнения, который вызывается компонентом COM. Он состоит из различных библиотек DLL.)

Чтобы протестировать вызов COM-компонента из PHP, я написал свой собственный COM-компонент (т.е. не использующий MATLAB). Это можно успешно вызвать, используя

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

Следовательно, все соответствующие настройки php.ini установлены для вызова COM.
(Компонент COM создается в Visual Studio 2015, и на сервере установлены соответствующие библиотеки развертывания.)

Тем не менее, я не могу заставить следующее работать,

$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.
(Исходя из различных вопросов / ответов о переполнении стека, имеющих схожую с этим тему, я начал с предоставления разрешений IIS_IUSRS, затем IUSR, затем NETWORK SERVICES и, наконец, добавив «Все».
Ничего из этого не сработало.)

Чего мне не хватает в том, что я не могу склеить IIS и мой COM-компонент?

редактировать
Вот еще немного информации:

  • Sites узел диспетчера IIS указывает, что мой сайт использует пул приложений mypool,
  • Стол на Application Pools узел диспетчера IIS указывает, что идентичность mypool является IWPD_1(myname)
  • Однако если я зайду в настройки mypool Идентичность указана как ApplicationPoolIdentity, (Почему они различны и соответствует ли IIS одному другому?)

Я дал DefaultAppPool, а также myname а также IWPD_1(myname) полные права доступа к каталогам, содержащим мои COM DLL и MCR.

У кого-нибудь есть что-то еще, что я могу попробовать, прежде чем отказаться от IIS и просто вернуться на хост Linux?

0

Решение

Это на самом деле не отвечает на мой вопрос, но это обходной путь, который может помочь другим.

Я закончил тем, что изменил Load User Profile настройка для моего пула приложений на true, Это создает профиль под C:\Users для учетной записи, используемой пулом приложений, с соответствующими разрешениями для доступа пользователя пула приложений. Затем я установил MATLAB MCR и нашел мои dll в каталогах внутри Documents каталог этого профиля пользователя.

Я еще не исследовал последствия этого для безопасности, но это заставляет меня переживать, что код не работает.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]