Проблема регистрации COM-сервера, написанного для Excel, зарегистрированного на клиентском компьютере (невозможно установить полный путь к mscoree.dll) - PullRequest
8 голосов
/ 31 марта 2010

В этом предыдущем вопросе <<a href="/898424/kak-ustanovit-i-zaregistrirovat-com-server-dlya-excel-napisannyi-na-vb-net-v-spiske-serverov-avtomatizatsii"> Как установить и зарегистрировать COM-сервер для Excel, написанный на VB.NET, в списке серверов автоматизации? > есть пример того, как создать полный путь к разделу реестра. используя VS 2008. Все в предыдущем ответе работает правильно, за исключением того, что полный путь, который я задаю (используя редактор реестра в VS) для mscoree.dll, не работает (это означает, что он, похоже, ничего не делает).

Полный путь к реестру:

HKEY_CLASSES_ROOT \ CLSID \ {my_GUID} \ InprocServer32 \ (по умолчанию)

и значение, которое я устанавливаю:

[SystemFolder] mscoree.dll

Я могу поставить что угодно (включая жесткое кодирование полного пути), но настройка, кажется, не имеет значения, и реестр всегда содержит mscoree.dll без какого-либо пути.

Я попытался добавить другое значение в путь реестра через VS, и это работает правильно, включая полный путь, указанный в [SystemFolder].

Причина, по которой мне нужен полный путь (как объяснено в предыдущем вопросе), заключается в том, что без пути Excel генерирует ошибку при выборе сервера автоматизации, поскольку он не может найти mscoree.dll (что интересно, хотя я получаю сообщение об ошибке регистрация работает нормально).

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

Я устанавливаю систему VISTA * 64, но получаю ту же ошибку в других ОС.

Кто-нибудь знает, что я делаю неправильно?

1 Ответ

1 голос
/ 20 декабря 2010

Я не пробовал, но я предполагаю, что это связано с тем, когда VS.NET вставляет в ваш ключ реестра "[SystemFolder] mscoree.dll". Это работало в оригинальном посте. Это может быть связано с тем, что VS.NET сначала запускает «regasm / regfile», а затем перезаписывает этот ключ «[SystemFolder] mscoree.dll»

В вашем случае это не работает, потому что VS.NET сначала вставляет раздел реестра «[SystemFolder] mscoree.dll» в таблицу реестра MSI, а затем ваше значение перезаписывается значениями, выводимыми из «regasm / regfile». ».

Чтобы исключить возможность того, что VS.NET перезаписывает ваше значение, я думаю, что вы можете пометить свою DLL vsdrpDoNotRegister. Тогда VS.NET не будет творить чудеса с вашей таблицей реестра. Теперь вы все сами по себе, чтобы правильно выполнить регистрацию надстройки. Однако, как сказал оригинал, все, что делал VS.NET, просто вызывало "regasm / regfile". Почему бы тебе не сделать это самостоятельно. Как только вы получите файл .reg из "regasm / regfile your.dll", единственное, что вам нужно сделать, это импортировать его в таблицу реестра. Щелкните правой кнопкой мыши «Реестр на целевом компьютере» и выберите меню «Импорт ...». Вот и все. Это не так сложно. После того, как вы импортируете свой reg-файл, вы должны увидеть следующий ключ

HKEY_CLASSES_ROOT\CLSID\{my_GUID}\InprocServer32\(default)

Значение по-прежнему должно быть равно mscoree.dll. Теперь вы можете просто изменить его на [SystemFolder] mscoree.dll.

...