Windows服务中的Activator.CreateInstance失败

时间:2010-03-22 11:31:14

标签: c# reflection

我遇到了Windows服务的问题,每当我尝试使用

时都会抛出NullReference异常
var myType = Activator.CreateInstance(typeof(MyType))

每当我在控制台窗口中运行完全相同的代码时都没有问题 - 并且在调试显而易见的“哪个用户正在运行此代码”后,我怀疑改变运行服务的用户的事实就像我一样我试图使用计算机的管理员帐户以及LocalSystem来运行该服务。我怀疑是一个摆弄默认用户权限的Windows Update,但我觉得这有点绝望。

请记住:类型和程序集存在且工作正常 - 否则我将无法在控制台窗口中运行代码。只有在Windows服务的上下文中运行时才会出错。

问题是:我可以通过创建GenericPrincipal(GenericPrincipal看起来如何)来以任何方式冒充即单元测试中的LocalSystem吗?

2 个答案:

答案 0 :(得分:1)

您始终可以将Visual Studio实例作为LocalSystem运行。从命令行输入以下内容:

at <time in near future> /interactive  <path to devenv.exe>

然后等待该时间滚动并且VS应该打开,但是将在LocalSystem帐户下运行。

我个人不怀疑用户帐户,而是怀疑它与交互有关 - MyType的构造函数或类构造函数是否对桌面有一些隐式依赖?

(编辑 - oops,应该是在交互之前的时间,更正命令行)。

e.g。

at 11:48 /interactive "c:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe"

答案 1 :(得分:0)

我知道这是一个简单的答案,但您是否尝试将其放入try catch块然后写出异常以查看它是基于Permission还是其他。