Использование System.Collections.ArrayList из .NET в VB6

На моем компьютере для разработки и в клиентской среде у нас есть двоичный файл Visual Basic 6, который делает следующее:

dim x as object
set x = CreateObject("System.Collections.ArrayList")

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

Недавно мы установили новый компьютер с Windows Server 2012 R2 (с .NET 4.X как частью ОС). Когда я пытаюсь запустить тот же двоичный файл VB6 на этом компьютере, в приведенной выше строке возникает ошибка:

"Ошибка автоматики"

Если я добавлю ссылку на C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.tlb, она все равно будет работать на моем локальном компьютере для разработки

dim x as New ArrayList
x.Add("test")
x.Count ' 1

... но все еще получает ошибку автоматизации на сервере 2012 года.

Возможно ли, что пользователь, запускающий двоичный файл (LocalSystem), не имеет прав на использование DLL? Я также попытался запустить двоичный файл с тем же пользователем домена, который я использую на своей локальной машине.

Почему эта разница между двумя компьютерами/средами?


person Developer Webs    schedule 04.01.2019    source источник
comment
Я думал, что, возможно, у меня установлена ​​только 64-разрядная версия .NET, но у меня есть несколько версий в этом каталоге: C:\Windows\Microsoft.NET\Framework   -  person Developer Webs    schedule 05.01.2019
comment
Некоторые люди предлагают переустановить .NET 2.0 или 3.X. Но когда я пытаюсь сделать это на сервере 2012 R2, я просто получаю сообщение об ошибке: ... не может быть установлен. Роли и функции Windows Server не могут быть автоматически установлены или удалены с помощью панели управления функциями Windows (несмотря на то, что я вручную запускаю программу установки.   -  person Developer Webs    schedule 05.01.2019
comment
По моему опыту, такие проблемы связаны с файлами app.config. См. эти ответы: stackoverflow.com/a/47867724/3929185 и stackoverflow.com/a/41142221/3929185. Также используйте хакер процессов или procexp и определите, какой .net clr вызывается: -are-running-2-0-4-5-4-5-1-or-4-5-2/" rel="nofollow noreferrer">blogs.msdn.microsoft.com/rodneyviana/2014/12/23 /   -  person froque    schedule 07.01.2019
comment
Похоже на проблему с установкой. Попробуйте восстановить компоненты... Сравните следующие ключи реестра и убедитесь, что они выглядят одинаково на вашей рабочей машине: HKLM\SOFTWARE\Classes\CLSID\{6896B49D-7AFB-34DC-934E-5ADD38EEEE39} и HKLM\SOFTWARE\Classes\ System.Collections.ArrayList   -  person Simon Mourier    schedule 07.01.2019
comment
@froque app.config? Это исполняемый файл VB6, app.config отсутствует.   -  person Developer Webs    schedule 07.01.2019
comment
@SimonMourier У первого есть разные дочерние элементы, System.Collections.ArrayList имеет только System.Collections.ArrayList\CLSID со значением {6896B49D-7AFB-34DC-934E-5ADD38EEEE39} (которое, как я полагаю, является указателем на первое).   -  person Developer Webs    schedule 07.01.2019
comment
Дети должны быть почти одинаковыми (младший номер версии clr и путь к Windows system32). Кроме того, вы должны проверить 32-битный реестр (я думаю, вы все x86, а не x64), так что это будет HKLM\SOFTWARE\Classes\WOW6432Node\CLSID\{6896B49D-7AFB-34DC-934E-5ADD38EEEE39}   -  person Simon Mourier    schedule 07.01.2019
comment
@SimonMourier Это 64-битная система. Я нашел решение и ответил на свой вопрос.   -  person Developer Webs    schedule 07.01.2019
comment
@DeveloperWebs, вы проверили ссылки, которые я предоставил? Ваше приложение может быть исполняемым файлом VB6, но вы вызываете код .NET, который будет искать файл app.config. Ваш ответ ниже еще раз подтверждает мои подозрения.   -  person froque    schedule 07.01.2019
comment
@froque Я сделал. Я вызываю встроенные библиотеки .NET. У них нет файлов .config (или, по крайней мере, ни одного, с которым мне следует возиться)? Я нашел решение. Смотрите ответ, который я добавил.   -  person Developer Webs    schedule 07.01.2019


Ответы (1)


Похоже, что .NET 4.X был установлен вместе с Windows. ИТ-специалист Ют использовал пользовательский интерфейс «Добавить/удалить функции Windows» для установки .NET 2.x и 3.x. Раньше я пытался установить их с помощью веб-установщика Microsoft, но это не удалось. При установке .NET 2.x и 3.X исполняемый файл VB6 теперь правильно создает экземпляр библиотеки System.Collections.ArrayList и работает без ошибок. Я подозреваю, что это означает, что .NET 4.x не предоставляет интерфейс COM.

person Developer Webs    schedule 07.01.2019