Як зареєструвати файл 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командний рядок (виконується у підвищеному режимі!) Та натисніть «Ввести». Зауважте, що його name.dllслід замінити на ім'я DLL, яку потрібно зареєструвати. Наприклад, якщо ви хочете зареєструвати iexplore.dll, введіть regsvr32 iexplore.dll.


5
regsvr32 шлях до файлу .dll з назвою файлу та розширенням та натисніть клавішу Enter
RK Sharma

202

Ну, ви не вказуєте, чи є 32 або 64 бітний dll і ви не включаєте повідомлення про помилку, але я думаю, що це та сама проблема, що описана в цій статті KB: Повідомлення про помилку при запуску 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" дуже важливо !!
шиндиго

4
Я не думаю, що нам доведеться копіювати його в папку system32 або syswow64. Просто зареєструйте файл де б він не був.
Нікос

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

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"
Josh McKearin

6

Якщо DLL 32-бітний:

  1. Скопіюйте DLL на C: \ Windows \ SysWoW64 \
  2. У підвищеному cmd:% windir% \ SysWoW64 \ regsvr32.exe% windir% \ SysWoW64 \ namell.dll

якщо DLL 64-бітний:

  1. Скопіюйте DLL на C: \ Windows \ System32 \
  2. У підвищеному cmd:% windir% \ System32 \ regsvr32.exe% windir% \ System32 \ namell.dll

6

Все тут провалювалося як неправильний шлях. Тоді я згадав витівку зі старих днів Win95. Відкрийте папку програми, де знаходиться .dll, відкрийте C: / Windows / System32, прокрутіть униз до regsvr32 та перетягніть dll із папки програми на rgsrver32. Бум, готово.


2
це працює, але може бути проблематичним, якщо вам потрібно запустити це як адміністратор.
трубайт

3

Знання повідомлення про помилку було б досить цінним. Він призначений для надання інформації, навіть якщо для вас це не має жодного сенсу. Вимушений здогадуватися, я б сказав, що DLL - це 32-бітний фільтр DirectX. У такому випадку це повинен бути правильний хід дій:

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

Це потрібно запустити у підвищеному командному рядку, щоб UAC не міг зупинити необхідний доступ до реєстру. Задайте більше запитань щодо цього на superuser.com


3

Я щойно перевірив цей надзвичайно простий метод, і він прекрасно працює - але я використовую вбудований обліковий запис адміністратора, тому мені не доведеться стрибати через обручі для отримання підвищених привілеїв.

Наступний пакетний файл позбавляє користувача від необхідності переміщення файлів у / з системних папок. Він також залишає за собою Windows застосувати належну версію 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 щоб запобігти збою будь-яких спроб подальшого спостереження, пов'язаних з UAC. Після успішної реєстрації слід видалити вихідний ( -.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 на Windows 64, або більш чіткої 32-розрядної Windows для 64-бітної Windows. Коли ви думаєте про це таким чином, ім'я має сенс, навіть якщо воно в цьому контексті заплутане.

Я не можу знайти своє оригінальне джерело в блозі MSDN, але на нього посилається в цій статті у Вікіпедії http://en.wikipedia.org/wiki/WoW64


1

Ось як я вирішив цю проблему на машині Win7 x64:

1 - повідомлення про помилку:

"Не вдалося CoCreateInstance (). Plkease перевірити записи реєстру CLSID {F088EA74-2E87-11D3-B1F3-00C0F03C37D3} і переконайтеся, що ви ввійшли як адміністратор"

2 - процедура виправлення:

  • Запустіть / введіть cmd / RightMouseClick на cmd.exe і виберіть "Запустити як адміністратор"
  • набрано: regsvr32 / s C: \ Програмні файли \ Autodesk \ 3ds Max Design 2015 \ atl.dll regsvr32 / s C: \ Файли програм \ Autodesk \ 3ds Max Design 2015 \ MAXComponents.dll
  • перезапустіть Win 7 і знову в бізнесі!

Сподіваюся, це допомагає!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.