2012-02-16 5 views
0

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

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

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

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

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

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

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

Unable to cast COM object of type 'System.__ComObject' to interface type 'MegaMapp.MegaCurrentEnv'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{33D6C7C0-7D1B-450E-B8A4-8A8611D5B40F}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE))

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

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

ответ

1

Компоненты ActiveX всегда будут нуждаться в настройках реестра на клиентской машине.

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

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

The activex dll is the only way we can communicate with the software. So we built the .net program with the api calls.

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

+0

Activex dll - единственный способ общения с программным обеспечением. Таким образом, мы создали программу .net с вызовами api. Невозможно зарегистрировать dll на клиентской машине, поскольку они находятся на сервере. –

+0

Пути UNC могут работать, вы пытались его зарегистрировать? – jgauffin

+0

Регистрация DLL не устраняет эту проблему. –

0

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

+0

Внешняя утилита - это .net-программа, которая использует dll activex, которая зарегистрирована на сервере, где находится exe. –

+0

Я согласен с @jgauffin - попробуйте зарегистрироваться на клиентских машинах через UNC-пути –

+0

Регистрация DLL не устраняет эту проблему. –

Смежные вопросы