Вызов DLL-сервера COM-сервера на 64-разрядной машине Windows - PullRequest
1 голос
/ 25 августа 2010

У меня 64-битные проблемы. Вот совок:

У меня 32-битный COM exe (написанный на FoxPro). Этот exe-файл вызывает 32-битную COM-библиотеку (также написанную на FoxPro). В 32-битном мире Windows, DLL находится в каталоге C:/Windows/System32, зарегистрировано в C:/Windows/System32/regsvr32.exe, и все хорошо. Exe может быть запущен, и любые процессы, требующие dll, в порядке.

Это другая история в 64-битном мире. Я пытался установить это приложение на машине под управлением Windows 7 x64, например, так:

  • Я помещаю dll в C:/Windows/SysWOW64
  • Я зарегистрировал его с помощью C:/Windows/SysWow64/regsvr32.exe, но мне удалось только успешно выполнить регистрацию, запустив regsvr32 с помощью параметра контекстного меню «Запуск от имени администратора».

Теперь, когда я пытаюсь запустить свой exe-файл, он не может вызвать dll, кроме случаев, когда мой exe-файл запускается с использованием параметра «Запуск от имени администратора». Это не хорошо. Пользователь не должен быть администратором только для запуска простого приложения.

Кто-нибудь знает, как я могу заставить это работать, не требуя опции «Запуск от имени администратора» ??

Спасибо!

1025 * Кен *

1 Ответ

4 голосов
/ 25 августа 2010

Старые вещи, вероятно, никогда ранее не пробовали на учетной записи пользователя с ограниченными привилегиями.Это, вероятно, делает что-то многословное, например, запись в ключи реестра в HKLM \ Software или создание файла в c: \ windows.Это закончено и сделано в эти дни.

Если вы не знаете, что это может быть сделано, используйте инструмент ProcMon от SysInternals, чтобы наблюдать за ним с помощью диска и реестра.Ошибка отказа в доступе должна появиться, хотя для этого нужно немного покопаться.Если вы не можете изменить код, тогда вам действительно следует подумать об окончании срока службы этого компонента.Вы можете взломать права на определенный файл или раздел реестра, которые он пытается использовать в качестве промежуточного решения.Не делайте ничего с каталогами c: \ windows, это вызывает больше проблем, чем решает.Что еще важно, ваш компонент действительно не принадлежит частному каталогу Windows.

...