c # — объект DCOM — CoCreateInstanceEx успешно выполняется, но Activator.CreateInstance завершается ошибкой

Нативный код C ++:

int main()
{
auto hr = CoInitializeEx(nullptr, COINIT_MULTITHREADED);

COSERVERINFO server = {0, L"Win7x64", nullptr, 0};

MULTI_QI qi = {&IID_XXXService, nullptr, 0};

hr = CoCreateInstanceEx(CLSID_XXXService, nullptr, CLSCTX_REMOTE_SERVER, &server, 1, &qi);
}

Успешно, с любой резьбовой моделью. С или без звонка CoInitializeSecurity,
Но при попытке создать экземпляр одного и того же объекта из .NET / C # всегда происходит сбой 0x80070005:

static void Main(string[] args)
{
var machineName = "Win7x64";
try
{
Type dcomType = Type.GetTypeFromCLSID(typeof(XXXService).GUID, machineName, false);
object dcomObj = Activator.CreateInstance(dcomType);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}

Я попробовал последнее с CoInitializeSecurity (DllImported), с атрибутом потока MTA и STA, с повышенным UAC-процессом, но всегда происходит сбой. Если machineName это для текущей машины, она работает (да, текущая машина разработки имеет тот же интерфейс COM и зарегистрированный класс).

РЕДАКТИРОВАТЬ: Для того, чтобы успешно позвонить CoInitializeSecurityпараметр «Включить процесс размещения Visual Studio» должен быть отключен. Еще тогда, CreateInstance выходит из строя.

С нативным кодом это всегда работает. С управляемым кодом это никогда не работает. Что можно сделать?

EDIT2: безопасность COM на удаленной машине:

  • Права доступа (ограничения): Все, а также АНОНИМНЫЙ ЛОГОН (среди прочих общих) — Полный доступ.
  • Права доступа (по умолчанию): SELF, SYSTEM, ANONYMOUS LOGON — Полный доступ ко всем.
  • запуск & Активация (лимиты): все, пользователи DCOM, анонимный вход (среди прочих общих) — полный доступ.
  • запуск & Разрешения на активацию (по умолчанию): SYSTEM, NETWORK, ANONYMOUS LOGON, INTERACTIVE — Полный доступ ко всем.

2

Решение

Задача ещё не решена.

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


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