Как зарегистрировать файл DLL в 64-разрядной версии Windows 7?


101

Я пробовал использовать следующий код:

cd c:\windows\system32
regsvr32.exe dllname.ax

Но у меня это не работает. Как я могу зарегистрировать файл DLL в Windows 7 с 64-битным процессором?


Поскольку этот вопрос помечен как "vb.net", я должен задаться вопросом, почему вы пытаетесь зарегистрировать созданную вами DLL в VB.NET. Для использования с regsvr32DLL необходимо экспортировать функции DllRegisterServerи DllUnregisterServer. Подавляющее большинство создаваемых вами DLL вообще не регистрируется.
Коди Грей

12
Что вы имеете в виду под словом «не работает» или «бесполезно»? Вы получаете сообщение об ошибке? Что там написано?
Коди Грей

Ответы:


68

Введите regsvr32 name.dllв командной строке (выполняется в режиме с повышенными привилегиями!) И нажмите «Enter». Обратите внимание, что его name.dllследует заменить на имя библиотеки DLL, которую вы хотите зарегистрировать. Например, если вы хотите зарегистрировать iexplore.dll, введите regsvr32 iexplore.dll.


5
regsvr32 путь к файлу .dll с именем файла и расширением и нажмите Enter
РК Шарма

202

Ну, вы не указываете, 32- или 64-разрядная dll, и не включаете сообщение об ошибке, но я предполагаю, что это та же проблема, что описана в этой статье базы знаний : Сообщение об ошибке при запуске Regsvr32.exe в 64-битной Windows

Цитата из этой статьи:

Это происходит потому, что файл Regsvr32.exe в папке System32 имеет 64-разрядную версию. Когда вы запускаете Regsvr32 для регистрации DLL, вы по умолчанию используете 64-битную версию.

Решение из этой статьи:

Чтобы решить эту проблему, запустите Regsvr32.exe из папки% SystemRoot% \ Syswow64. Например, введите следующие команды для регистрации библиотеки DLL: cd \windows\syswow64 regsvr32 c:\filename.dll


13
Почему это не выбранный ответ?
Майк Девенни

5
Это действительно должен быть правильный ответ. Я могу понять, что в его исходном сообщении синтаксис был неправильным, но Раджкумар прокомментировал, что он получал сообщение об ошибке даже при использовании правильного синтаксиса. Это требует двух шагов к правильному ответу для ищущего человека вместо одного. Сначала ответ, выбранный как правильный, затем следуя цепочке комментариев, заканчивая этим сообщением.
Роб

102

Если DLL 32- битная:

Скопируйте DLL в C: \ Windows \ SysWoW64 \
В командной строке с повышенными привилегиями:%windir%\SysWoW64\regsvr32.exe %windir%\SysWoW64\namedll.dll

если DLL 64- битная:

Скопируйте DLL в C: \ Windows \ System32 \
В командной строке с повышенными привилегиями:%windir%\System32\regsvr32.exe %windir%\System32\namedll.dll

Я знаю, что это кажется неправильным, но так оно и работает. Видеть:

http://support.microsoft.com/kb/249873
Цитата: «Примечание. В 64-разрядной версии операционной системы Windows есть две версии файла Regsv32.exe:
64-разрядная версия -% systemroot% \ System32 \ regsvr32.exe.
32-разрядная версия -% systemroot% \ SysWoW64 \ regsvr32.exe.
"


26
+1 за «Я знаю, что кажется неправильным, но так оно и есть» со ссылкой на support.microsoft.com ... без ссылки, в это трудно поверить.
Тревор Бойд Смит

6
"В повышенных cmd" очень важно !!
shindigo

4
Я не думаю, что нам нужно копировать его в папку system32 или syswow64. Просто зарегистрируйте файл, где бы он ни находился.
Nikos

30

В системе x64 system32 предназначена для 64-разрядной версии, а syswow64 - для 32-разрядной версии (а не наоборот, как указано в другом ответе). WOW (Windows в Windows) - это 32-битная подсистема, которая работает под 64-битной подсистемой).

Это путаница в терминологии именования, и она только сбивает с толку, но так оно и есть.

Очередной раз ...

syswow64 - 32-битный, а НЕ 64-битный.

system32 - это 64-разрядная версия, а НЕ 32-разрядная.

В каждом из этих каталогов есть regsrv32. Один 64-битный, а другой 32-битный. То же самое и с odbcad32 и др. (Если вы хотите увидеть 32-разрядные драйверы ODBC, которые не будут отображаться с odbcad32 по умолчанию в system32, который является 64-разрядным.)


1
Почему это имеет значение? regsvr32позаботится о деталях, теоретически он определит, регистрируете ли вы 32-битную или 64-битную DLL: stackoverflow.com/questions/18935163/…
Sk8erPeter 05

8

Откройте меню «Пуск» и введите cmd в поле поиска. Удерживайте Ctrl + Shift и нажмите Enter.

Это запускает командную строку в режиме администратора.

Теперь введите: regsvr32 MyComobject.dll


6

Наконец, я нашел решение, просто запустите CMD от имени администратора, затем напишите

cd \windows\syswow64

тогда напишите это

regsvr32 c:\filename.dll

Я надеюсь, что этот ответ тебе поможет


Если вы уже скопировали filename.dll в папку syswow64 и изменили рабочий каталог на syswow64 в командной строке, то "c: \" в "regsvr32 c: \ filename.dll" не требуется. Короче говоря, "regsvr32 c: \ filename.dll" следует читать "regsvr32 filename.dll"
Джош Маккирин,

6

Если DLL 32-битная:

  1. Скопируйте DLL в C: \ Windows \ SysWoW64 \
  2. В командной строке с повышенными правами:% windir% \ SysWoW64 \ regsvr32.exe% windir% \ SysWoW64 \ namedll.dll

если DLL 64-битная:

  1. Скопируйте DLL в C: \ Windows \ System32 \
  2. В командной строке с повышенными правами:% windir% \ System32 \ regsvr32.exe% windir% \ System32 \ namedll.dll

6

Здесь все шло по ложному пути. Потом я вспомнил трюк из старых времен Win95. Откройте папку программы, в которой находится .dll, откройте C: / Windows / System32, прокрутите вниз до regsvr32 и перетащите dll из папки программы на rgsrver32. Бум, готово.


2
это работает, но может быть проблематичным, если вам нужно запустить это как администратор.
workabyte

3

Было бы очень полезно знать сообщение об ошибке. Он предназначен для предоставления информации, даже если для вас это не имеет никакого значения для нас. Принужденный догадываться, я бы сказал, что DLL - это 32-битный фильтр DirectX. В этом случае это должно быть правильным курсом действий:

cd c:\windows\syswow64
move ..\system32\dllname.ax .
regsvr32.exe dllname.ax

Это должно выполняться в командной строке с повышенными привилегиями, чтобы UAC не мог остановить требуемый доступ к реестру. Задайте дополнительные вопросы по этому поводу на superuser.com


3

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

Следующий командный файл избавляет пользователя от необходимости перемещать файлы в / из системных папок. Это также оставляет на усмотрение Windows применить правильную версию Regsvr32.

ИНСТРУКЦИИ:

  • В папке, содержащей файл библиотеки ( -.dllили -.ax), который вы хотите зарегистрировать, откройте новый текстовый файл и вставьте ОДНУ из следующих подпрограмм:

    echo BEGIN DRAG-AND-DROP %n1 REGISTRAR FOR 64-BIT SYSTEMS
    copy %1 C:\Windows\System32
    regsvr32 "%nx1"
    echo END BATCH FILE
    pause
    

    echo BEGIN DRAG-AND-DROP %n1 REGISTRAR FOR 32-BIT SYSTEMS
    copy %1 C:\Windows\SysWOW64
    regsvr32 "%nx1"
    echo END BATCH FILE
    pause
    
  • Сохраните новый текстовый файл как файл batch ( -.bat); затем просто перетащите ваш -.dllили -.axфайл поверх командного файла.

  • Если UAC не дает вам возможности запустить командный файл от имени администратора, вам может потребоваться вручную повысить привилегии (инструкции для Windows 7):

    1. Щелкните правой кнопкой мыши командный файл;
    2. Выбрать Create shortcut;
    3. Щелкните ярлык правой кнопкой мыши;
    4. Выбрать Properties;
    5. Щелкните Compatibilityвкладку;
    6. Установите флажок с надписью Run this program as administrator;
    7. Перетащите ваш -.dllили-.ax файл поверх нового ярлыка вместо пакетного файла.

Вот и все . Я выбрал COPY вместо того , MOVE чтобы предотвратить выход из строя какого - либо контроля учетных записей , связанных с последующей попыткой (ы). Успешная регистрация должна сопровождаться удалением исходной библиотеки ( -.dll или -.ax файл ).

Не беспокойтесь о копиях, сделанных в системную папку ( C:\Windows\System32 или C:\Windows\SysWOW64 ) предыдущими проходами - они будут перезаписываться каждый раз, когда вы запускаете командный файл.

Если вы не запустили неправильный командный файл , в этом случае вы, вероятно, захотите удалить копию, сделанную в неправильную системную папку ( C:\Windows\System32 или C:\Windows\SysWOW64 ) перед запуском правильного пакетного файла, ... или ...

  • Помогите Windows выбрать правильный файл библиотеки для регистрации, полностью указав его расположение в каталоге.

    1. Из правого командного файла скопируйте путь к системной папке
      • Если 64-битный: C:\Windows\System32
      • Если 32-битный: C:\Windows\SysWOW64
    2. Вставьте его в следующую строку так, чтобы он предшествовал %nx1
      • Если 64-битный: regsvr32 "C:\Windows\System32\%nx1"
      • Если 32-битный: regsvr32 "C:\Windows\SysWOW64\%nx1"
        • Вставить путь в кавычки
        • Вставьте обратную косую черту, чтобы отделить %nx1от пути к системной папке
      • или ...

  • Запустите этот командный файл дробовика, который (по порядку):

    1. Выполните очистку прерванных процессов регистрации
      • Отменить любой процесс регистрации, завершенный файлом вашей библиотеки;
      • Удалите все копии файла библиотеки, которые были сохранены в любую системную папку;
      • Сделайте паузу, чтобы позволить вам завершить работу командного файла на этом этапе (и запустить другой, если хотите).
    2. Попытка 64-битной установки в файле библиотеки
      • Скопируйте файл библиотеки в C:\Windows\System32;
      • Зарегистрируйте файл библиотеки как 64-битный процесс;
      • Сделайте паузу, чтобы на этом этапе завершить работу командного файла.
    3. Отменить 64-битную установку
      • Отмените любую регистрацию файла библиотеки как 64-битного процесса;
      • Удалите файл библиотеки из C:\Windows\System32;
      • Сделайте паузу, чтобы позволить вам завершить работу командного файла на этом этапе (и запустить другой, если хотите).
    4. Попытка 32-разрядной установки в файле библиотеки
      • Скопируйте файл библиотеки в C:\Windows\SystemWOW64
      • Зарегистрируйте файл библиотеки как 32-битный процесс;
      • Сделайте паузу, чтобы на этом этапе завершить работу командного файла.
    5. Удалить исходную незарегистрированную копию файла библиотеки

Run as administratorотображается серым, когда я создал ярлык для файла bat. Я вошел в систему как администратор. Кроме того, это %nx1или %n1?
Джон

3

В Windows 7 есть разница. Вход в систему с правами администратора не дает тех же прав, что и при запуске программы с правами администратора.

Зайдите в Пуск - Все программы - Аксессуары. Щелкните правой кнопкой мыши в окне команд и выберите «Запуск от имени администратора». Теперь зарегистрируйте dll в обычном режиме через regsrvr32 xxx.dll.



3

Вам нужно запустить cmd.exeвc:\windows\system32\ by administrator

Команды: Для отмены регистрации файлов * .dll

regsvr32.exe /u C:\folder\folder\name.dll

Для регистрации * .dll файлов

regsvr32.exe C:\folder\folder\name.dll

2

Отчасти путаница с regsvr32 заключается в том, что в 64-битных окнах имя и путь не изменились, но теперь он регистрирует 64-битные библиотеки DLL. 32-битный regsvr32 существует в SysWOW64, имя, которое, похоже, представляет 64-битные приложения. Однако WOW64 в названии относится к Windows в 64-разрядной версии Windows или, точнее, к 32-разрядной версии Windows в 64-разрядной версии Windows. Когда вы думаете об этом так, название имеет смысл, даже если оно сбивает с толку в данном контексте.

Я не могу найти свой исходный источник в блоге MSDN, но он упоминается в этой статье Википедии http://en.wikipedia.org/wiki/WoW64


1

Вот как я исправил эту проблему на машине Win7 x64:

1 - сообщение об ошибке:

«Ошибка CoCreateInstance (). Проверьте CLSID {F088EA74-2E87-11D3-B1F3-00C0F03C37D3} записей реестра и убедитесь, что вы вошли в систему как администратор»

2 - порядок исправления:

  • Запустите / введите cmd / RightMouse Щелкните cmd.exe и выберите «Запуск от имени администратора».
  • набрано: regsvr32 / s C: \ Program Files \ Autodesk \ 3ds Max Design 2015 \ atl.dll regsvr32 / s C: \ Program Files \ Autodesk \ 3ds Max Design 2015 \ MAXComponents.dll
  • перезапустите Win 7 и снова вернитесь в рабочее состояние!

Надеюсь это поможет !

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.