Проблема с регистрацией dll - Отказано в доступе

При попытке запустить regasm на Win2008 Server:

regasm "C:\Program Files\FooProg\Bar.dll" /tlb:"C:\Program Files\FooProg\Bar.tlb"

Я получаю следующую ошибку:

RegAsm: ошибка RA0000: Произошла ошибка при сохранении экспортированной библиотеки типов: Отказано в доступе. (Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED))

Что это значит


person Vidar    schedule 04.12.2009    source источник
comment
Похоже, у вас нет доступа для записи данных в глобальный кеш сборки. Вы работаете как обычный пользователь? Как насчет места на диске? Предыдущая установка ожидает завершения?   -  person Craig    schedule 04.12.2009
comment
По моему опыту, если вы пытаетесь разработать что-то для работы на сервере 2008 года, вам следует просто сдаться, прежде чем вы начнете экономить время/деньги/и головные боли, потому что права безопасности в этой ОС не соответствуют требованиям.   -  person Jrud    schedule 04.12.2009
comment
да - я должен был запустить cmd.exe от имени администратора. ах!   -  person Vidar    schedule 04.12.2009


Ответы (11)


Учетная запись, под которой вы запускаете regasm, не имеет прав на запись в C:\Program Files\FooProg\, поэтому regasm не может записать .tlb. Запустите regasm под учетной записью с правами администратора.

person sharptooth    schedule 04.12.2009

Эта ошибка, скорее всего, возникает из-за того, что вы не можете удалить соответствующий файл .tlb. Два других предложения:

  1. Остановите IIS и повторите попытку регистрации:
  2. Остановите IIS, удалите файлы .tlb из любого места, где находится ваш файл DLL, а затем повторите попытку регистрации.
  3. Закройте все инструменты IE/IIS/DEV (они могут держать некоторые файлы в состоянии только для чтения), а затем попытайтесь зарегистрировать вашу DLL.
person Community    schedule 07.04.2010
comment
+1 Это помогло мне найти проблему. Я случайно добавил \ после имени файла tlb, и он создал папку с тем же именем, что и файл tlb. Удаление папки решило проблему. - person surfen; 07.10.2012
comment
Спасибо, что поделились этим подтверждением. Эта дополнительная папка определенно сорвет ваше исполнение. - person Dominik Ras; 27.11.2012

Используемая вами учетная запись требует прав администратора.

person scottm    schedule 04.12.2009

В моем случае файлы .dll и .tlb были только для чтения, удаление проверки только для чтения сработало для меня, также я закрыл процесс, который его использовал, например (Visual Studio IDE).

person Shiva    schedule 02.05.2011
comment
+1 В моем случае я не удалял только готовые, а просто удалял файл .tlb, но переключение только для чтения, вероятно, сделало бы для меня то же самое, поскольку я уже работал с правами администратора. - person Chris Magnuson; 15.01.2012

Эта ошибка, скорее всего, возникает из-за того, что вы не можете удалить соответствующий файл .tlb. Два других предложения: 1. Остановите IIS и повторите попытку регистрации: 2. Остановите IIS, удалите файлы .tlb из любого места, где находится ваш DLL-файл, а затем снова попытайтесь зарегистрироваться.

person Community    schedule 07.04.2010

Вы также можете столкнуться с этой проблемой, если не укажете полный путь в аргументе /tlb.

Он попытается записать в C:\windows\system32. Даже если вы работаете от имени администратора, по умолчанию у вас нет прав на запись в этот каталог.

Решение состоит в том, чтобы просто указать полный путь (к каталогу, на который у вас есть права) в аргументе /tlb.

person Ryan Lundy    schedule 04.02.2013

Скорее всего, вы получаете сообщение об ошибке из-за того, что процесс перехватывает файлы .dll или .tlb, которые вы пытаетесь зарегистрировать или скопировать. Перезагрузите компьютер и повторите попытку или удалите файл .tlb и перестройте его, чтобы убедиться, что вы можете получить к нему доступ.

person CDB    schedule 09.04.2013

У меня был бродячий процесс dllhost.exe. Его уничтожение позволило мне удалить файл .tlb и перерегистрировать его. Другие подходы (остановка IIS, остановка пулов приложений, закрытие всех IDE) не дали результата.

person MPelletier    schedule 03.10.2014

Для меня файл использовался другим приложением

person Miguel Fernandes Muldy    schedule 28.05.2019
comment
то же самое на моей стороне! - person Roeland; 02.04.2020

Сначала мне пришлось удалить все пробелы в пути к моей dll, прежде чем regasm нашел файл dll.

Но когда я попытался с кавычками вокруг целей, это все равно сработало.

person autodidact    schedule 30.10.2012

Win 7 (если вы уже являетесь администратором) — вы можете включить разрешения для файла, щелкнув правой кнопкой мыши и выбрав свойства, вкладку «Безопасность», нажмите «Изменить», проверьте наличие разрешений, например. Полный контроль.

person Nasri Najib    schedule 22.11.2013