Я нахожусь на стене, которую я понимаю. У меня есть простой COM-сервер, который я хочу создать. Я могу сделать это с помощью простых VBS или команд PS вне моего EXE:.NET Процесс не может создать объект ActiveX
$sms_client = New-Object -COM 'CPApplet.CPAppletMgr'
Set controlPanelAppletManager = CreateObject("CPApplet.CPAppletMgr")
В моих C# код, который я попробовал раннее связывание, поздно переплет, PS пространство выполнения/трубопровод и, наконец, Process.Start (Cscript myVBS). Во всех этих сценариях он возвращается с классом, который не зарегистрирован и терпит неудачу.
//throws exception
CPAPPLETLib.CPAppletMgr cpAppletMgr= new CPAPPLETLib.CPAppletMgr();
// myType does not come back null
Type myType = Type.GetTypeFromProgID("CPApplet.CPAppletMgr");
// throws exception
object myObject = Activator.CreateInstance(myType);
Обновление: Я могу создать Scripting.FileSystemObject без проблем. Мне это не нужно ... это был просто тест.
Я пробовал скомпилировать 32-битную, 64-битную. Выполняется как стандартный пользователь и повышен. Я попытался зарегистрировать DLL снова, но что-то о том, что мой C# .NET EXE делает то, что просто не может видеть COM. Я даже попытался создать совершенно новый проект консольного приложения, и он тоже там.
Я пропустил что-то, что является .NET 101 COM-Interop фундаментальным?
Retrieving the COM class factory for component with CLSID {096C5BA8-044B-4BAC-9914-144723BA4F2A} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
Update:
Установка платформы на x64 допущена ошибка исчезнет. AnyCPU и x86 терпят неудачу. Означает ли это, что мне нужно создать 2 версии EXE для 32-битных и 64-битных рабочих станций?
Эта статья может помочь: [Использование 32-разрядных или 64-разрядных компонентов ActiveX в x64 Windows] (http://cknotes.com/using-32-bit-or-64-bit-activex-components-on- x64-windows /) – TnTinMn