ОК, в то время как я никогда не думал, что в 2012 году я бы написал свой первый элемент управления ActiveX (и да, для этого есть веская причина). Я борюсь за то, чтобы он запускался под Windows 7 (x64).
Краткая история решения: Я отсутствовал /codebase из некоторых своих вызовов regasm, а также смешивал 32 и 64-битные процессы, но этому не помогало стандартное смешение командной строки VS2010 32 и 64-разрядные пути для regasm и cscript.
Должна долгая история:
Я подпрыгивал между
Создание элемента управления ActiveX в .NET с помощью С#
( Упс У меня была неправильная ссылка.. хотя похоже, что ссылка, которую я изначально предоставил, была кем-то, копирующим исходную страницу блога)
Создание элемента управления ActiveX в .Net с использованием С#
и
Элемент управления С# ActiveX (CSActiveX)
И я, кажется, успешно строил проекты (для последней мне пришлось изменить расположение компилятора ресурсов в нужное место).
Для первого проекта я использую предложенный установщик, для второго проекта я пытаюсь использовать regasm напрямую.
Но после этого все идет вниз по склону. Я пытаюсь зарегистрировать все, кроме либо:
- Я понятия не имею, как я должен их регистрировать, или:
- Я понятия не имею, как я должен их регистрировать.
Мой тестовый пример был простым JScript файлом, содержащим
var x = new ActiveXObject( "name of object" );
Что не удается с ошибкой:
test.js(1,1) Ошибка выполнения Microsoft JScript: сервер автоматизации не может создавать объект
Я не уверен, что это проблема с разрешениями, или проблема с 32 или 64 бит или комбинация.
Многие сайты, предлагающие помощь в ActiveX, предполагают, что вы будете получать доступ к нему через веб-страницу, поэтому я попытался просмотреть разрешения IE (хотя я хочу загрузить элемент управления в программу из 3-й части).
Я знаю, что если я использую версии reg framework или framework64, я могу контролировать, где в записи реестра ставится - и я видел некоторые ссылки на запуск cscript как 32 или 64 бит (что может повлиять на какая часть реестра выполняется поиск) в зависимости от вызываемой оболочки cmd (и я пробовал оба способа, а также пытается создать "администратор" ).
Итак, в основном на этом этапе я понятия не имею, что я делаю или что я должен делать.
Моя цель - зарегистрировать элемент управления ActiveX в Windows 7 x64 и загрузить его с помощью:
- Тест .js script выполняется из командной строки по умолчанию Windows
- Загрузите тот же элемент управления в нечто вроде Excel 2007 VBA (только для тестирования)
- Загрузите элемент управления в приложение из третьей части (RSView Studio от Rockwell) и разместите его в приложении VBA (и мне нужно проверить, является ли это 32 или 64-битной программой. Я подозреваю, что это первый)
Примечания
Для проекта, в котором пользователи установщика (создание элемента ActiveX в .Net с использованием С#), он устанавливает код в "c:\program Files (x86) \" и ищет с regedit. Я нахожу записи в разделе "Компьютер\HKEY_CLASSES_ROOT\Wow6432Node\CLSID\", который, как мне кажется, говорит мне, что DLL была установлена как 32-битный процесс. Я попытался запустить мой тест cscript из 32-х и 64-х бит-cmd, и оба они терпят неудачу. Учтите, что установщик создавал эквивалент "regasm/codebase" при его запуске.
В проекте, где я пытался использовать regasm для его регистрации (С# ActiveX control (CSActiveX)), у него есть дополнительный код для регистрации элемента управления ActiveX COM. В этом коде упоминается регистрация 32-битных серверных процессов (см. ActiveXCtrlHelpers.cs)
(Кстати, я также проклинаю автоответчик в Safari/Lion на данный момент, продолжает менять строчную "DLL" в "все" )
Редактировать 2012-08-07
В ответ на ответ Art я обнаружил:
Из стандартной командной строки VS2010
При запуске 'regasm/codebase' через стандартную командную строку VS2010 (и как администратор, чтобы разрешить regasm выполнять изменения), записи были загружены в реестр под HKEY_CLASSES_ROOT\Wow6432Node\CLSID, а тестовые скрипты не сработали из того же приглашения.
Однако я могу видеть элемент управления ActiveX в Excel 2007 (32 бит)
Из командной строки x64 Win64 VS2010
При запуске в командной строке VS2010 x64 Win64 (опять же как admin) записи реестра появлялись под HKEY_CLASSES_ROOT\CLSID, но на этот раз тестовые скрипты работали из одного и того же приглашения, а также из стандартной командной строки Windows cmd (однако они не с 32-битная подсказка)
Но!! Я не вижу активного элемента управления X из Excel 2007 (32 бит)
Теперь мне просто нужно выяснить, что эквивалентно окну * nix ', который' команду для обеспечения того, какой regasm я использую) команда 'where'
Просмотр команд VS2010 и Windows 7:
VS2010 (standard prompt): cscript => c:\windows\system32\cscript.exe
regasm => c:\windows\Microsoft.net\framework\v4.0.30319\regasm.exe
VS2010 (x64 Win 64): cscript => c:\windows\system32\cscript
regasm => c:\windows\Microsoft.net\framework64\v4.0.30319\regasm.exe
Windows 7 std. prompt: cscript => c:\windows\system32\cscript.exe
Windows 7 32 bit prompt: cscript => c:\windows\SysWOW64\cscript.exe
Это все начинает понимать некоторые из моих путаниц. Я бессознательно смешивал и сопоставлял 32 и 64-битные системы, но стандартное приглашение VS2010 тоже не помогло!
(и мой последний peeve - VS2010, сохраняющий файлы как UTF-8 с спецификацией)