Поскольку этот вопрос помечен как "vb.net", я должен задаться вопросом, почему вы пытаетесь зарегистрировать созданную вами DLL в VB.NET. Для использования с regsvr32DLL необходимо экспортировать функции DllRegisterServerи DllUnregisterServer. Подавляющее большинство создаваемых вами DLL вообще не регистрируется.
Коди Грей
12
Что вы имеете в виду под словом «не работает» или «бесполезно»? Вы получаете сообщение об ошибке? Что там написано?
Коди Грей
Ответы:
68
Введите regsvr32 name.dllв командной строке (выполняется в режиме с повышенными привилегиями!) И нажмите «Enter». Обратите внимание, что его name.dllследует заменить на имя библиотеки DLL, которую вы хотите зарегистрировать. Например, если вы хотите зарегистрировать iexplore.dll, введите regsvr32 iexplore.dll.
Это происходит потому, что файл Regsvr32.exe в папке System32 имеет 64-разрядную версию. Когда вы запускаете Regsvr32 для регистрации DLL, вы по умолчанию используете 64-битную версию.
Решение из этой статьи:
Чтобы решить эту проблему, запустите Regsvr32.exe из папки% SystemRoot% \ Syswow64. Например, введите следующие команды для регистрации библиотеки DLL:
cd \windows\syswow64regsvr32 c:\filename.dll
Это действительно должен быть правильный ответ. Я могу понять, что в его исходном сообщении синтаксис был неправильным, но Раджкумар прокомментировал, что он получал сообщение об ошибке даже при использовании правильного синтаксиса. Это требует двух шагов к правильному ответу для ищущего человека вместо одного. Сначала ответ, выбранный как правильный, затем следуя цепочке комментариев, заканчивая этим сообщением.
Роб
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.
"
+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-разрядным.)
Почему это имеет значение? regsvr32позаботится о деталях, теоретически он определит, регистрируете ли вы 32-битную или 64-битную DLL: stackoverflow.com/questions/18935163/…
Sk8erPeter 05
8
Откройте меню «Пуск» и введите cmd в поле поиска. Удерживайте Ctrl + Shift и нажмите Enter.
Это запускает командную строку в режиме администратора.
Если вы уже скопировали filename.dll в папку syswow64 и изменили рабочий каталог на syswow64 в командной строке, то "c: \" в "regsvr32 c: \ filename.dll" не требуется. Короче говоря, "regsvr32 c: \ filename.dll" следует читать "regsvr32 filename.dll"
Джош Маккирин,
6
Если 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
Здесь все шло по ложному пути. Потом я вспомнил трюк из старых времен Win95. Откройте папку программы, в которой находится .dll, откройте C: / Windows / System32, прокрутите вниз до regsvr32 и перетащите dll из папки программы на rgsrver32. Бум, готово.
это работает, но может быть проблематичным, если вам нужно запустить это как администратор.
workabyte
3
Было бы очень полезно знать сообщение об ошибке. Он предназначен для предоставления информации, даже если для вас это не имеет никакого значения для нас. Принужденный догадываться, я бы сказал, что DLL - это 32-битный фильтр DirectX. В этом случае это должно быть правильным курсом действий:
cd c:\windows\syswow64
move ..\system32\dllname.ax .
regsvr32.exe dllname.ax
Это должно выполняться в командной строке с повышенными привилегиями, чтобы UAC не мог остановить требуемый доступ к реестру. Задайте дополнительные вопросы по этому поводу на superuser.com
Я только что протестировал этот чрезвычайно простой метод, и он отлично работает, но я использую встроенную учетную запись администратора, поэтому мне не нужно перепрыгивать через обручи для получения повышенных привилегий.
Следующий командный файл избавляет пользователя от необходимости перемещать файлы в / из системных папок. Это также оставляет на усмотрение 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):
Щелкните правой кнопкой мыши командный файл;
Выбрать Create shortcut;
Щелкните ярлык правой кнопкой мыши;
Выбрать Properties;
Щелкните Compatibilityвкладку;
Установите флажок с надписью Run this program as administrator;
Перетащите ваш -.dllили-.ax файл поверх нового ярлыка вместо пакетного файла.
Вот и все . Я выбрал COPYвместо того , MOVEчтобы предотвратить выход из строя какого - либо контроля учетных записей , связанных с последующей попыткой (ы). Успешная регистрация должна сопровождаться удалением исходной библиотеки ( -.dllили-.ax файл ).
Не беспокойтесь о копиях, сделанных в системную папку ( C:\Windows\System32илиC:\Windows\SysWOW64 ) предыдущими проходами - они будут перезаписываться каждый раз, когда вы запускаете командный файл.
Если вы не запустили неправильный командный файл , в этом случае вы, вероятно, захотите удалить копию, сделанную в неправильную системную папку ( C:\Windows\System32илиC:\Windows\SysWOW64 ) перед запуском правильного пакетного файла, ... или ...
Помогите Windows выбрать правильный файл библиотеки для регистрации, полностью указав его расположение в каталоге.
Из правого командного файла скопируйте путь к системной папке
Если 64-битный: C:\Windows\System32
Если 32-битный: C:\Windows\SysWOW64
Вставьте его в следующую строку так, чтобы он предшествовал %nx1
Если 64-битный: regsvr32 "C:\Windows\System32\%nx1"
Если 32-битный: regsvr32 "C:\Windows\SysWOW64\%nx1"
Вставить путь в кавычки
Вставьте обратную косую черту, чтобы отделить %nx1от пути к системной папке
или ...
Запустите этот командный файл дробовика, который (по порядку):
Выполните очистку прерванных процессов регистрации
Отменить любой процесс регистрации, завершенный файлом вашей библиотеки;
Удалите все копии файла библиотеки, которые были сохранены в любую системную папку;
Сделайте паузу, чтобы позволить вам завершить работу командного файла на этом этапе (и запустить другой, если хотите).
Попытка 64-битной установки в файле библиотеки
Скопируйте файл библиотеки в C:\Windows\System32;
Зарегистрируйте файл библиотеки как 64-битный процесс;
Сделайте паузу, чтобы на этом этапе завершить работу командного файла.
Отменить 64-битную установку
Отмените любую регистрацию файла библиотеки как 64-битного процесса;
Удалите файл библиотеки из C:\Windows\System32;
Сделайте паузу, чтобы позволить вам завершить работу командного файла на этом этапе (и запустить другой, если хотите).
Попытка 32-разрядной установки в файле библиотеки
Скопируйте файл библиотеки в C:\Windows\SystemWOW64
Зарегистрируйте файл библиотеки как 32-битный процесс;
Сделайте паузу, чтобы на этом этапе завершить работу командного файла.
Удалить исходную незарегистрированную копию файла библиотеки
Run as administratorотображается серым, когда я создал ярлык для файла bat. Я вошел в систему как администратор. Кроме того, это %nx1или %n1?
Джон
3
В Windows 7 есть разница. Вход в систему с правами администратора не дает тех же прав, что и при запуске программы с правами администратора.
Зайдите в Пуск - Все программы - Аксессуары. Щелкните правой кнопкой мыши в окне команд и выберите «Запуск от имени администратора». Теперь зарегистрируйте dll в обычном режиме через regsrvr32 xxx.dll.
И при этом, если вы получаете код ошибки 0x80040201, попробуйте решение в DllRegisterServer не удалось с кодом ошибки 0x80040201 , но убедитесь, что вы открываете командную строку как Запуск от имени администратора .
Отчасти путаница с regsvr32 заключается в том, что в 64-битных окнах имя и путь не изменились, но теперь он регистрирует 64-битные библиотеки DLL. 32-битный regsvr32 существует в SysWOW64, имя, которое, похоже, представляет 64-битные приложения. Однако WOW64 в названии относится к Windows в 64-разрядной версии Windows или, точнее, к 32-разрядной версии Windows в 64-разрядной версии Windows. Когда вы думаете об этом так, название имеет смысл, даже если оно сбивает с толку в данном контексте.
Вот как я исправил эту проблему на машине 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 и снова вернитесь в рабочее состояние!
regsvr32
DLL необходимо экспортировать функцииDllRegisterServer
иDllUnregisterServer
. Подавляющее большинство создаваемых вами DLL вообще не регистрируется.Ответы:
Введите
regsvr32 name.dll
в командной строке (выполняется в режиме с повышенными привилегиями!) И нажмите «Enter». Обратите внимание, что егоname.dll
следует заменить на имя библиотеки DLL, которую вы хотите зарегистрировать. Например, если вы хотите зарегистрировать iexplore.dll, введитеregsvr32 iexplore.dll
.источник
regsvr32
путь к файлу .dll с именем файла и расширением и нажмите EnterНу, вы не указываете, 32- или 64-разрядная dll, и не включаете сообщение об ошибке, но я предполагаю, что это та же проблема, что описана в этой статье базы знаний : Сообщение об ошибке при запуске Regsvr32.exe в 64-битной Windows
Цитата из этой статьи:
Решение из этой статьи:
источник
Если 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.
"
источник
В системе 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-разрядным.)
источник
regsvr32
позаботится о деталях, теоретически он определит, регистрируете ли вы 32-битную или 64-битную DLL: stackoverflow.com/questions/18935163/…Откройте меню «Пуск» и введите cmd в поле поиска. Удерживайте Ctrl + Shift и нажмите Enter.
Это запускает командную строку в режиме администратора.
Теперь введите:
regsvr32 MyComobject.dll
источник
Наконец, я нашел решение, просто запустите CMD от имени администратора, затем напишите
тогда напишите это
Я надеюсь, что этот ответ тебе поможет
источник
Если DLL 32-битная:
если DLL 64-битная:
источник
Здесь все шло по ложному пути. Потом я вспомнил трюк из старых времен Win95. Откройте папку программы, в которой находится .dll, откройте C: / Windows / System32, прокрутите вниз до regsvr32 и перетащите dll из папки программы на rgsrver32. Бум, готово.
источник
Было бы очень полезно знать сообщение об ошибке. Он предназначен для предоставления информации, даже если для вас это не имеет никакого значения для нас. Принужденный догадываться, я бы сказал, что DLL - это 32-битный фильтр DirectX. В этом случае это должно быть правильным курсом действий:
Это должно выполняться в командной строке с повышенными привилегиями, чтобы UAC не мог остановить требуемый доступ к реестру. Задайте дополнительные вопросы по этому поводу на superuser.com
источник
Я только что протестировал этот чрезвычайно простой метод, и он отлично работает, но я использую встроенную учетную запись администратора, поэтому мне не нужно перепрыгивать через обручи для получения повышенных привилегий.
Следующий командный файл избавляет пользователя от необходимости перемещать файлы в / из системных папок. Это также оставляет на усмотрение Windows применить правильную версию
Regsvr32
.ИНСТРУКЦИИ:
В папке, содержащей файл библиотеки (
-.dll
или-.ax
), который вы хотите зарегистрировать, откройте новый текстовый файл и вставьте ОДНУ из следующих подпрограмм:Сохраните новый текстовый файл как файл batch (
-.bat
); затем просто перетащите ваш-.dll
или-.ax
файл поверх командного файла.Если UAC не дает вам возможности запустить командный файл от имени администратора, вам может потребоваться вручную повысить привилегии (инструкции для Windows 7):
Create shortcut
;Properties
;Compatibility
вкладку;Run this program as administrator
;-.dll
или-.ax
файл поверх нового ярлыка вместо пакетного файла.Вот и все . Я выбрал
COPY
вместо того ,MOVE
чтобы предотвратить выход из строя какого - либо контроля учетных записей , связанных с последующей попыткой (ы). Успешная регистрация должна сопровождаться удалением исходной библиотеки (-.dll
или-.ax
файл ).Не беспокойтесь о копиях, сделанных в системную папку (
C:\Windows\System32
илиC:\Windows\SysWOW64
) предыдущими проходами - они будут перезаписываться каждый раз, когда вы запускаете командный файл.Если вы не запустили неправильный командный файл , в этом случае вы, вероятно, захотите удалить копию, сделанную в неправильную системную папку (
C:\Windows\System32
илиC:\Windows\SysWOW64
) перед запуском правильного пакетного файла, ... или ...Помогите Windows выбрать правильный файл библиотеки для регистрации, полностью указав его расположение в каталоге.
C:\Windows\System32
C:\Windows\SysWOW64
%nx1
regsvr32 "C:\Windows\System32\%nx1"
regsvr32 "C:\Windows\SysWOW64\%nx1"
%nx1
от пути к системной папкеЗапустите этот командный файл дробовика, который (по порядку):
C:\Windows\System32
;C:\Windows\System32
;C:\Windows\SystemWOW64
источник
Run as administrator
отображается серым, когда я создал ярлык для файла bat. Я вошел в систему как администратор. Кроме того, это%nx1
или%n1
?В Windows 7 есть разница. Вход в систему с правами администратора не дает тех же прав, что и при запуске программы с правами администратора.
Зайдите в Пуск - Все программы - Аксессуары. Щелкните правой кнопкой мыши в окне команд и выберите «Запуск от имени администратора». Теперь зарегистрируйте dll в обычном режиме через regsrvr32 xxx.dll.
источник
И при этом, если вы получаете код ошибки 0x80040201, попробуйте решение в DllRegisterServer не удалось с кодом ошибки 0x80040201 , но убедитесь, что вы открываете командную строку как Запуск от имени администратора .
источник
Вам нужно запустить
cmd.exe
вc:\windows\system32\ by administrator
Команды: Для отмены регистрации файлов * .dll
regsvr32.exe /u C:\folder\folder\name.dll
Для регистрации * .dll файлов
источник
Отчасти путаница с regsvr32 заключается в том, что в 64-битных окнах имя и путь не изменились, но теперь он регистрирует 64-битные библиотеки DLL. 32-битный regsvr32 существует в SysWOW64, имя, которое, похоже, представляет 64-битные приложения. Однако WOW64 в названии относится к Windows в 64-разрядной версии Windows или, точнее, к 32-разрядной версии Windows в 64-разрядной версии Windows. Когда вы думаете об этом так, название имеет смысл, даже если оно сбивает с толку в данном контексте.
Я не могу найти свой исходный источник в блоге MSDN, но он упоминается в этой статье Википедии http://en.wikipedia.org/wiki/WoW64
источник
Вот как я исправил эту проблему на машине Win7 x64:
1 - сообщение об ошибке:
«Ошибка CoCreateInstance (). Проверьте CLSID {F088EA74-2E87-11D3-B1F3-00C0F03C37D3} записей реестра и убедитесь, что вы вошли в систему как администратор»
2 - порядок исправления:
Надеюсь это поможет !
источник