C# 测试“以本地管理员身份运行”的部分

C# 测试“以本地管理员身份运行”的部分,c#,windows,security,C#,Windows,Security,我正在为Redis服务器开发一些测试。每台服务器都作为Windows服务运行。我有三个哨兵监视一个主人和一个奴隶。哨兵负责主设备的故障切换,主要是将从设备连接到主设备。作为测试的一部分,我想通过停止服务来模拟主服务器失败。我得到一个ServiceController实例数组,特别是一个与主服务相对应的ServiceController实例。问题是,当我在ServiceController实例上调用方法Stop时,我得到一个InvalidOperationException,因为我没有足够的权限停

我正在为Redis服务器开发一些测试。每台服务器都作为Windows服务运行。我有三个哨兵监视一个主人和一个奴隶。哨兵负责主设备的故障切换,主要是将从设备连接到主设备。作为测试的一部分,我想通过停止服务来模拟主服务器失败。我得到一个ServiceController实例数组,特别是一个与主服务相对应的ServiceController实例。问题是,当我在ServiceController实例上调用方法Stop时,我得到一个InvalidOperationException,因为我没有足够的权限停止服务


我在公司域中有一个域帐户。此域帐户位于本地管理员组中,因此我有权停止该服务。如果我以管理员身份运行VS devenv.exe,则整个测试运行正常。但是我宁愿整个测试不以管理员的身份运行,当我不得不解释VS需要以管理员的身份运行时,这使得解释如何运行这些测试变得很困难。我只希望停止服务的测试部分仅以管理员身份运行。测试的其余部分可以作为登录的用户me运行。我无法使用Win32 LogonUser,因为我没有本地管理员凭据,而且许多内置帐户(如本地管理员)没有密码。因此,我想要的是某种模拟本地管理员的方法,本质上是以编程方式以管理员身份运行。同样,这是一个单元测试,所以我不能通过产生一个新的过程来使用经常提出的答案。我想要一些类似于模拟的东西,在那里我可以模拟、做一些工作和恢复。想法?

你点击了关键词,知道你需要做什么,那就是在.config文件中设置服务作为模拟运行。。我完全不建议这样做,但如果只是为了测试。。它不应该痛。。如果您没有使用模拟google it,那么有很多例子表明您无法做到这一点,因为安全系统的设计不允许出现允许这种情况的漏洞。如果这是可能的,那么恶意程序很容易获得管理员权限。老实说,以管理员身份运行VS确实是最简单的方法。只需在开始测试之前检查管理员权限,失败时会显示一条明确的消息,说明需要管理员权限,使用“以管理员身份运行”重新启动VS。另一种选择是生成另一个请求提升的进程,只需保持它运行,这样用户就不必在每次测试运行时单击某个对话框。此外,如果需要启动和停止服务,这显然不是单元测试。