Невозможно добавить dll в 32-битную PowerShell

Я пытаюсь добавить оснастку Exchange 2007 для 32-разрядной версии Powershell (Microsoft.Exchange.Management.PowerShell.Admin), но, похоже, у меня возникли проблемы при установке dll-файла.

Это команды, которые я запускаю, чтобы зарегистрировать SnapIns

PS C:\Program Files\Microsoft\Exchange Server\Bin> $snapinPath = 'Microsoft.Exchange.Management.PowerShell.Support.dll'
PS C:\Program Files\Microsoft\Exchange Server\Bin> C:\Windows\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe /i $snapinPath

Вышеупомянутое работает без проблем. Затем я перехожу к установке основного SnapIn со следующими командами:

PS C:\Program Files\Microsoft\Exchange Server\Bin> $snapinPath = 'Microsoft.Exchange.PowerShell.Configuration.dll'
PS C:\Program Files\Microsoft\Exchange Server\Bin> C:\Windows\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe /i $snapinPath

Утилита установки Microsoft (R) .NET Framework Версия 2.0.50727.5483 Copyright (c) Microsoft Corporation. Все права защищены.

При инициализации установки возникло исключение: System.BadImageFormatException: не удалось загрузить файл или сборку «Microsoft.Exchange.PowerShell.Configuration, версия = 8. 0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35' или одна из его зависимостей. Была предпринята попытка загрузить программу с неверным форматом.

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


person Saintwolf    schedule 26.05.2015    source источник
comment
Вы уверены, что используете 32-разрядную версию PowerShell? Эта ошибка, скорее всего, связана с загрузкой 32-разрядной сборки в 64-разрядное приложение или наоборот.   -  person makhdumi    schedule 26.05.2015
comment
Ну, насколько мне известно, DLL должна быть независимой от платформы, что имело бы смысл, почему первая DLL зарегистрировалась, но не могу понять, почему вторая нет.   -  person Saintwolf    schedule 26.05.2015
comment
А, может .NET версия сборки › 2.0? Вы используете (64-битный?) InstallUtil.exe из .NET 2.0.   -  person makhdumi    schedule 26.05.2015
comment
Также см. этот пост, по которому можно определить, для какой архитектуры была скомпилирована сборка. Попробуйте запустить filemon, чтобы увидеть, откуда и откуда осуществляется доступ, чтобы увидеть, нет ли путаницы с путями. Другое дело, есть ли в этой сборке какие-либо зависимости собственного кода, которые также должны соответствовать архитектуре процесса.   -  person Chris O    schedule 26.05.2015
comment
Спасибо, Крис. Архитектура процессора: Amd64. Похоже, мне нужно будет скопировать DLL из 32-разрядной версии Exchange. Спасибо :)   -  person Saintwolf    schedule 26.05.2015


Ответы (1)


Моя проблема заключалась в том, что я использовал 64-разрядную версию Microsoft.Exchange.PowerShell.Configuration.dll.

Мне нужна была 32-битная версия. Поскольку это не позволило мне установить 32-разрядную версию, я извлек установочные файлы для 32-разрядной версии обмена и скопировал папку setup\serverroles\common в C:\Program Files\Microsoft\Exchange Server и переименовал его в Bin32.

Последним этапом было копирование этого ключа реестра:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\PowerShellSnapIns\Microsoft.Exchange.Management.PowerShell.Admin

в следующее место:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\PowerShell\1\PowerShellSnapIns\Microsoft.Exchange.Management.PowerShell.Admin

а затем измените любые пути в ключе, чтобы они указывали на новую папку Bin32.

На этом этапе должна быть возможность загрузить оснастку Microsoft.Exchange.Management.Powershell.Admin в 32-разрядную оболочку Powershell (отлично подходит для приложений IIS, которые зависят от 32-разрядных библиотек).

person Saintwolf    schedule 26.05.2015