Проблемы с запуском программы из общей папки - PullRequest
0 голосов
/ 16 февраля 2012

В настоящее время мы находимся в процессе разработки внешних утилит для .net 4.0 на основе предоставленного нам API.

Основная программа, с которой запускаются внешние утилиты, находится на виртуальном сервере. Таким образом, каждый пользователь запускает программу, перейдя в сетевую папку и запустив .exe.

В основной программе есть возможность запуска внешних утилит, которые также запускаются по сетевому пути.

Внешние утилиты подключаются к основной программе через API. Если я не ошибаюсь, dll является компонентом activex.

Все разработчики имеют локальную установку основной программы. Это было необходимо для создания ссылки в .Net. Если установка не была доступна, ссылка не может быть связана. Для разработчиков инструмент работает.

Но для конечного пользователя, у которого нет полной установки, инструмент не работает, потому что он переходит в реестр и ищет некоторые значения. Они недоступны на станции конечного пользователя.

Конечный пользователь получает это предупреждение при попытке запуска

Невозможно преобразовать COM-объект типа «System .__ ComObject» в интерфейсный тип «MegaMapp.MegaCurrentEnv». Эта операция завершилась неудачно, поскольку вызов QueryInterface для компонента COM для интерфейса с IID '{33D6C7C0-7D1B-450E-B8A4-8A8611D5B40F}' завершился неудачно из-за следующей ошибки: такой интерфейс не поддерживается (Исключение из HRESULT: 0x80004002 (E_NOINTERFACE))

{33D6C7C0-7D1B-450E-B8A4-8A8611D5B40F} - это раздел реестра, недоступный для конечных пользователей.

Есть ли способ сообщить инструментам, что они должны загружать ключи реестра с сервера, на котором находится исполняемый файл, а не из локального реестра?

Ответы [ 2 ]

1 голос
/ 16 февраля 2012

Для компонентов ActiveX всегда требуются параметры реестра на клиентском компьютере.

вы можете использовать regsvr32 во время запуска приложения, чтобы зарегистрировать DLL перед ее использованием. Я не уверен, требуются ли права администратора.

Я бы не пытался использовать ActiveX в такой среде.

Activex DLL является единственным способом связи с программным обеспечением. Итак, мы создали программу .net с вызовами API.

Создайте сервер (например, узел службы WCF), который использует компонент ActiveX, и общайтесь с этим сервером с каждого клиента.

0 голосов
/ 16 февраля 2012

Если внешней утилитой является ActiveX EXE, вы можете зарегистрировать его на компьютерах конечных пользователей с помощью стандартной утилиты regsvr32. Это нужно сделать только в первый раз.

...