Мне нужно кое-что почитать, потому что я пытаюсь сделать то, что не до конца понимаю.
Существует 32-разрядное приложение (приложение электронной торговли, называемое CQG), которое предоставляет COM API для внешнего доступа. У меня есть примеры программ и сценариев, которые получают доступ к этому API из Excel, .NET (C ++, VB и C #) и оболочки VBScript. У меня есть эти .NET-приложения как исходный код и как скомпилированные исполняемые файлы (32-разрядные, скомпилированные в Windows XP).
Теперь у меня есть Windows Vista Home 64-bit, которая заставляет меня крутиться. Примеры Excel работают просто отлично (в Excel 2003). Скомпилированные примеры исполняемых файлов .NET также работают.
Но когда я пытаюсь запустить пример .NET C #, преобразованный и скомпилированный с помощью Visual Studio C # Expression, или запустить сценарий VBScript, я получаю ошибку 80004005 при попытке создать объект. Изначально .NET-приложение также давало мне 80040154, но потом я понял, как заставить его создавать 32-битный код, а не 64-битный, так что теперь ошибки в приложениях C # и VBScript одинаковы. Вот и весь прогресс, которого я достиг на данный момент.
И да, я пытался запустить 32-разрядные версии cscript.exe / WScript из папки SysWOW64 на моем VBS, но результат все равно (80004005).
Как решить эту проблему? Я почти готов поверить, что это практически невозможно, но тот факт, что Excel VBA работает и исполняемые файлы .NET, скомпилированные в Windows XP, работают очень хорошо, просто злит меня. Должен быть способ победить эту вещь (секрет, который наверняка знают только разработчики Windows Vista)! Я буду признателен за любую помощь!
PS: я полагаю, что примеры кода здесь не имеют большого смысла, но эта строка VBScript не работает:
Set CEL = WScript.CreateObject("CQG.CQGCEL.4.0", "CEL_")
А это C #:
CQGCEL CEL = new CQGCEL();
Обновление: забыл сказать, UAC выключен, конечно. И я работаю с учетной записью с правами администратора.
Я также пытался посмотреть, какие разделы реестра читаются с помощью Process Monitor, но все выглядит нормально для GUID этого объекта. Я не смог распознать некоторые другие GUID, поэтому я не уверен, были ли они критическими или нет.
Есть ли вероятность, что этот COM-объект использует Internet Explorer и получает неправильный (например, Internet Explorer 7 вместо механизма Internet Explorer 6 или что-то в этом роде)?