3

我开发了一个在 Visual Studio 2010 中开发的 Windows 服务,它执行 Exchange 2007 管理任务,并且我正在将它从 32 位开发服务器移动到 64 位生产服务器。该服务接受参数,然后调用 PowerShell 以执行 Exchange 2007 管理单元中的命令。

安装后,它在调试器和 Windows 服务本身的开发环境中都能正常工作;不幸的是,当我将项目复制到新的 Windows 2008 R2 64 位服务器并构建它时,我只能让服务在 VS2010 调试器中工作。在 64 位服务器上作为 Windows 服务安装时,该服务始终失败,并显示来自代码的 PowerShell 组件的消息,内容如下:

“没有为 Windows PowerShell 版本 2 注册任何管理单元”</p>

调用 PowerShell 实例时,C# 代码在特定行上失败:

运行空间配置 rc; PSSnapInInfo info = rc.AddPSSSnapIn("Microsoft.Exchange.Management.PowerShell.Admin", out warning);

正如我所提到的,只要我在 VS2010 调试器中运行代码,它就可以工作。

为了尝试解决这个问题,我尝试使用谷歌搜索错误并提出许多其他人遇到此问题,但没有人对此有明确的答案。按照其中一些帖子中留下的一些线索,我尝试了这些事情:

  • 我已删除并重新安装了 Exchange 2007 管理工具
  • 我已经从 Exchange 命令行管理程序 PowerShell 提示符处执行了“Get-PSSnapin”(并返回了一个看起来像这样的 Exchange 管理工具的列表 - 该版本说它适用于 PSVersion 1.0 而不是 2.0 但是,因为事情在我的VS2010 调试器,我认为 psversion 不是导致问题的原因):o 名称:Microsoft.Exchange.Management.PowerShell.Admin o PSVersion:1.0 o 描述:Exchange Server 的管理任务
  • 我尝试在 C:\Windows\Microsoft.NET\Framework64\v2.0.50727 下使用 INSTALLUTIL 注册管理单元作为安装工具 c:\program files\microsoft\exchange server\bin\microsoft.exchange.management.dll

但我仍然坚持在调试器中运行代码,直到我可以让它作为服务工作。

从我读到的消息的基调来看,这是一个很多人都遇到过的问题,但目前还没有人能够完全解决。任何人都可以提供任何帮助吗?

4

2 回答 2

1

使用 C# 开发的服务管理 Exchange 2007 时,我遇到了非常相似的问题

不仅要确保将您的代码编译为针对 x86 平台,还要确保您C:\Program Files (x86)\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0\System.Management.Automation.dll在调用 PowerShell 运行空间的类中具有对文件的特定引用。

于 2011-08-15T05:08:17.583 回答
0

该管理单元可能只有 32 位。重新编译您的服务以针对 x86 平台(如果您托管 PowerShell)或直接从 C:\Windows\SysWOW64\WindowsPowerShell\v1.0 运行 PowerShell.exe 的 32 位版本应该可以解决问题。

于 2011-08-12T12:37:31.247 回答