Ошибка DllRegisterServer с кодом ошибки 0x80004005 при регистрации Visual Fox Pro

Когда я пытаюсь зарегистрировать DLL Visual FoxPro через командную строку администратора:

C:\Windows\SysWOW64>regsvr32 C:\_temp\my.dll

на машинах, которые не мои, я получаю следующую ошибку:

Модуль "c:\_temp\my.DLL" был загружен, но вызов DllRegisterServer завершился неудачно с кодом ошибки 0x80004005.

Для получения дополнительных сведений об этой проблеме выполните поиск в Интернете, используя код ошибки в качестве условия поиска.

Я могу зарегистрировать его на моем. Как я могу получить больше информации о том, почему это не удается?

Могу ли я использовать свою машину, где она зарегистрирована, чтобы понять, почему она не регистрируется на других машинах?


Я вручную скопировал MSVCR70.dll в каталог %systemroot%\SysWOW64 на машине, на которой он не зарегистрируется.

Я проверил зависимости с помощью https://github.com/lucasg/Dependencies, и все выглядит хорошо. .

скриншот зависимостей


person spottedmahn    schedule 14.01.2019    source источник
comment
0x80004005 (он же E_FAIL) — самая распространенная из существующих ошибок, поэтому она нам ничего не говорит. Возможно, вы можете попробовать использовать Process Monitor docs.microsoft.com/en-us/ sysinternals/downloads/procmon и проверьте, какие ключи реестра или ошибки доступа к файлам вы получаете (вы можете отфильтровать имя исполняемого файла процесса, чтобы ограничить количество событий)   -  person Simon Mourier    schedule 14.01.2019
comment
????. Фильтровать по regsvr32.exe, как я полагаю? @SimonMourier   -  person spottedmahn    schedule 14.01.2019
comment
Зависит от того, что вы используете для регистрации, но да, если вы используете regsvr32.exe   -  person Simon Mourier    schedule 14.01.2019
comment
Самый прямой способ — установить точку останова на my!DllRegisterServer и посмотреть, что произойдет. Если вы не можете этого сделать, добавьте ведение журнала в свою функцию DllRegisterServer.   -  person Raymond Chen    schedule 14.01.2019
comment
Это VFP DLL, поэтому я не писал DllRegisterServer кода. Я предполагаю, что это сгенерировано для меня? @РаймондЧен   -  person spottedmahn    schedule 14.01.2019
comment
1250 событий для отказа, 2592 события для последующего. Не уверен, как отследить сбой, хотя. Удаление SUCCESS по-прежнему оставляет много записей в обоих. Мысли? @SimonMourier   -  person spottedmahn    schedule 14.01.2019
comment
Какая версия ВФП? Для самого последнего вам нужен MSVCR71, а не 70.   -  person Tamar E. Granor    schedule 15.01.2019
comment
Я не уверен, для какой версии VFP он был скомпилирован. @ТамарЭ.Гранор   -  person spottedmahn    schedule 15.01.2019
comment
Я предполагаю, что VFP 7, поскольку я искал в реестре эту DLL и вижу VFP7R.DLL под {CLSID}\Foxruntime @TamarE.Granor   -  person spottedmahn    schedule 15.01.2019
comment
Если событий для отказа меньше, чем для успеха, вы можете попытаться найти, когда и где произошла ошибка по сравнению с успехом, а затем вернуться назад, просматривая ошибки или NAME_NOT_FOUND. Но это действительно непросто, потому что есть много нефатальных сбоев или NAME_NOT_FOUND. Вы также можете активировать файловые события и посмотреть, ищет ли он определенный файл (конкретный для вашего приложения или VFP) и не может его найти.   -  person Simon Mourier    schedule 15.01.2019
comment
Хорошо, для VFP 7 подходит MSVCR70.   -  person Tamar E. Granor    schedule 16.01.2019


Ответы (2)


Обычно я находил и связывал 0x80004005 с разрешениями. Вы пытались запустить командную строку DOS от имени администратора?

Кроме того, VFP — это ТОЛЬКО 32-битное приложение/dll, оно никогда не поддерживало 64-битную версию, поэтому вам, вероятно, нужны файлы в System32, а не в SysWow64.

Разрешения также могут потребоваться для тех, кто ИСПОЛЬЗУЕТ dll. Пример: вы устанавливаете с правами администратора на диск

C:\SomePath\YourVFP.dll

Убедитесь, что у конечного пользователя также есть права доступа к этому пути/файлу.

Помимо вышеперечисленных пунктов... Есть ли у вас исходный код/проект VFP для создания DLL?

person DRapp    schedule 14.01.2019
comment
Да, командная строка администратора. SysWOW64 находится там, где MSVCR70.dll находится на моей машине. И SysWOW64: системная папка Windows (системный каталог) для 32-битных файлов - person spottedmahn; 15.01.2019
comment
У меня есть копия исходного кода, но я не уверен, что он точен, поэтому я пытаюсь использовать DLL, которая в настоящее время используется в PROD. - person spottedmahn; 15.01.2019

Основываясь на комментарии Тамар, я искал в реестре эту DLL на машине, где я мог ее зарегистрировать. и я нашел {CLSID}\Foxruntime\VFP7R.DLL.

Я установил среду выполнения VFP 7 из здесь (github.com/VFPX/VFPRuntimeInstallers) и я смог зарегистрировать DLL ????

person spottedmahn    schedule 15.01.2019