我正在为Redis服务器开发一些测试。每个服务器都作为Windows服务运行。我有三个哨兵用一个奴隶监视一个主人。哨兵负责主人的故障转移(基本上将奴隶转为主人)。作为我测试的一部分,我想通过停止服务来模拟主服务器失败。我得到一个ServiceController实例数组,具体来说我得到一个与主服务对应的ServiceController实例。问题是当我在ServiceController实例上调用Stop方法时,我得到一个InvalidOperationException,因为我没有足够的权限来停止服务。
我在公司域中拥有域帐户。此域帐户位于本地管理员组中,因此我有权停止该服务。如果我以管理员身份运行VS(devenv.exe)(“以管理员身份运行”),整个测试运行正常。但我宁愿整个测试不是以管理员身份运行的,而且当我必须解释VS需要以管理员身份运行时,它会解释如何难以运行这些测试。我只希望测试的一部分(停止服务)只以管理员身份运行。其余测试可以作为登录用户(我)运行。我无法使用Win32 LogonUser,因为我没有本地管理员凭据,许多“内置”帐户(如本地管理员)没有密码。所以我想要的是模仿本地管理员的一些方法(基本上以编程方式执行“run-as administrator”)。这是一个单元测试,所以我不能通过产生一个新的过程来使用经常提出的答案。我想要一些类似于Impersonate的东西,我可以冒充,做一些工作,然后还原。想法?