Пользовательская служба Windows вызывает Powershell для выполнения команд в обмен 32-битной или 64-битной проблемы? - PullRequest
3 голосов
/ 11 августа 2011

Я разработал службу Windows, разработанную в Visual Studio 2010, которая выполняет административные задачи Exchange 2007, и перенесу ее с 32-разрядного сервера разработки на 64-разрядный производственный сервер. Служба принимает аргументы, а затем вызывает PowerShell для выполнения команд в оснастке Exchange 2007.

Он правильно работает в среде разработки как в отладчике, так и в самой службе Windows после его установки; К сожалению, когда я скопировал проект на новый 64-разрядный сервер Windows 2008 R2 и собрал его, я смог заставить службу работать только в отладчике VS2010. При установке в качестве службы Windows на 64-разрядном сервере служба постоянно завершается сбоем с сообщением от компонента PowerShell кода, которое гласит:

«Никаких оснасток для Windows PowerShell версии 2 не зарегистрировано»

Сбой кода C # в конкретной строке при вызове экземпляра PowerShell:

RunspaceConfiguration rc; PSSnapInInfo info = rc.AddPSSSnapIn («Microsoft.Exchange.Management.PowerShell.Admin», предупреждение о выходе);

Как я уже говорил, код будет работать, пока я запускаю его в отладчике VS2010.

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

  • Я удалил и переустановил инструменты управления Exchange 2007
  • Я сделал «Get-PSSnapin» из приглашения PowerShell для Exchange Management Shell (и получил список средств администрирования Exchange, который выглядит следующим образом - версия говорит, что она предназначена для PSVersion 1.0, а не 2.0, но, поскольку работая в моем отладчике VS2010, я думал, что psversion не был причиной проблемы): o Имя: Microsoft.Exchange.Management.PowerShell.Admin. o PSVersion: 1,0 o Описание: задачи администратора для сервера Exchange
  • Я попытался зарегистрировать оснастку с помощью INSTALLUTIL в C: \ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 как o Установить с: \ программные файлы \ microsoft \ exchange server \ bin \ microsoft.exchange.management.dll

Но я все еще не могу запустить код в отладчике, пока не смогу заставить его работать как служба.

Судя по содержанию сообщений, которые я читал об этом, это проблема, с которой сталкивалось много людей, но пока никто не смог ее полностью исправить. Кто-нибудь может предложить какую-либо помощь?

Ответы [ 2 ]

1 голос
/ 15 августа 2011

У меня была очень похожая проблема при управлении Exchange 2007 с помощью службы, разработанной в C #

Убедитесь, что ваш код не только скомпилирован для платформы x86, но также убедитесь, что у вас есть конкретная ссылка на файл C:\Program Files (x86)\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0\System.Management.Automation.dll в классе, который вызывает пространство выполнения PowerShell.

0 голосов
/ 12 августа 2011

Эта оснастка, вероятно, только 32-разрядная.Перекомпиляция службы для целевой платформы x86 (если вы используете PowerShell) или запуск 32-разрядной версии PowerShell.exe непосредственно из C: \ Windows \ SysWOW64 \ WindowsPowerShell \ v1.0 должны все прояснить.

...