我开发了一个窗口应用程序,也创建了一项服务。我在窗口应用程序中使用编码启动服务,但收到如下错误:
无法在计算机“.”上打开窗口服务。
我使用了以下代码:
ServiceController controller = new ServiceController("SeoMozScheduleService");
if (controller.Status == ServiceControllerStatus.Stopped)
{
controller.Start();
}
如果我右键单击“应用程序”并单击
Run as Administrator
,那么它对我来说效果很好。
要在每次打开应用程序时自动执行此操作,您必须向解决方案中添加清单文件,然后更新文件内的
requestedExecutionLevel
节点,如下所示:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
但是,如果启用了UAC,更改此设置将导致系统每次都提示您以管理员身份运行应用程序。
前往
c://Program Files/ApplicationFolder/.exe
右键单击 .exe 并转到 Properties
,然后转到 Compatibility Tab
并选中 Run this Program as an administrator Level
true。
如果您正在使用 Visual Studio,则关闭它并重新打开 Visual Studio 并以管理员身份运行它
这些解决方案都没有帮助我,因为如果我实际上首先确保我在目标计算机上拥有管理员访问权限,那将会有所帮助! 我正在使用我的域管理员帐户取消并返还对我的主帐户的管理员访问权限。 当我运行一些
ServiceController
代码来检查服务是否在域管理员帐户下的远程计算机上运行时,一切都很好。 当我作为我的主帐户执行此操作时,它不起作用 - 即使以管理员身份运行 Visual Studio 也是如此。 事实证明,我一直在本地管理员组中没有主帐户的情况下进行测试...d'oh!
我在服务器上执行计划任务时遇到了这个问题——检查“以最高权限运行”解决了这个问题。 (当然,服务帐户必须具有管理员权限才能正常工作。)
将 app.conf 中的框架版本更改为系统上安装的版本解决了我的问题。
应用程序可能不需要需要管理员权限。 Microsoft 管理控制台 (MMC)(包括服务管理单元)则不然。 MMC 的清单有:
<requestedExecutionLevel
level="highestAvailable"
uiAccess="false"
/>
它没有
level="requireAdministrator"
。
参见 c# - 如何创建/编辑清单文件? - Stack Overflow 有关向项目添加清单的说明。
关于最小权限原则的文章非常多,包括以下这些。