我正在尝试使用以下代码启动服务。这适用于99%的机器,但我在用户机器上遇到此问题。有任何帮助可以重现此错误或为什么会出现此问题。
ServiceController sc = new ServiceController(name);
if (sc.Status == ServiceControllerStatus.Running ||
sc.Status == ServiceControllerStatus.StartPending)
{
sc.WaitForStatus(ServiceControllerStatus.Running);
Logger.Info("Service already running");
return true;
}
sc.Start();
我收到的错误是
System.InvalidOperationException:无法在计算机上启动服务 ''。 ---> System.ComponentModel.Win32Exception:访问被拒绝
我以管理员权限运行
创建服务时,我还运行sc sdset命令,使非管理进程停止服务。
答案 0 :(得分:1)
social msdn中有一个关于它的完整主题。对于许多用户而言,问题仍然存在,并且您似乎没有足够的特权来启动服务,在这种情况下,您将不得不将服务更改为管理帐户:
确保通过以下方式将服务设置为本地帐户:
然后再次检查它是否正常工作。
答案 1 :(得分:1)
我假设您正在尝试实现类似于this的方案,即安装服务并自动启动。
假设您已确定自己确实以管理员身份运行,即Admin命令提示符或以管理员身份运行。
此外,假设您已重新启动计算机以确保确实删除了旧版本的服务,因为您已尝试多次安装/卸载服务。
错误Access is denied
本质上意味着运行它的用户无权访问。因为您已经说过您以管理员身份运行,所以即使管理员也没有权限启动该服务。可能是您处于锁定环境中(可能通过组策略),在该环境中,只有域管理员才是“最强大的”!
下一步将调查您的服务具有的权限。一个有用的工具是:SubInAcl
https://ss64.com/nt/subinacl.html
显示或修改文件和文件夹的权限,所有权和域的访问控制项(ACE)。
SubInAcl /service "your service name"
上面的命令不容易使用!您需要从Microsoft网站上download进行访问。
另一个有用的工具是SC
command。默认情况下,这通常是可用的。
服务控制-创建,启动,停止,查询或删除任何Windows服务。
SC sdshow "your service name"
将提供许可的详细信息。
这将为您提供有助于进一步调查的数据。
您还可以使用此命令启动/停止服务。您可以尝试使用此工具来检查在使用此工具时是否也遇到了相同的异常。
以下serverfault问题提供了有关设置服务权限的一些详细信息
如果要查看installutil
的堆栈跟踪,可以使用/ShowcallStack
选项
https://docs.microsoft.com/en-us/dotnet/framework/tools/installutil-exe-installer-tool
/ ShowCallStack
如果在安装过程中的任何时候发生异常,则将调用堆栈输出到日志文件。
答案 2 :(得分:0)
这不是答案,这是我对该问题的进一步探索。
这是日志
Running a transacted installation.
Beginning the Install phase of the installation.
See the contents of the log file for the
D:\devnet10\Flight\Flight.ServiceHost\bin\Debug\flight.servicehost.exe assembly's progress.
The file is located at D:\devnet10\Flight\Flight.ServiceHost\bin\Debug\flight.servicehost.InstallLog.
An exception occurred during the Install phase.
System.InvalidOperationException: An exception occurred in the OnAfterInstall event handler of Flight.ServiceHost.Installation.
at System.Configuration.Install.Installer.Install(IDictionary stateSaver)
at Flight.ServiceHost.Installation.Install(IDictionary stateSaver) in D:\devnet10\Flight\Flight.ServiceHost\Installation.cs:line 36
at System.Configuration.Install.Installer.Install(IDictionary stateSaver)
at System.Configuration.Install.AssemblyInstaller.Install(IDictionary savedState)
at System.Configuration.Install.Installer.Install(IDictionary stateSaver)
at System.Configuration.Install.TransactedInstaller.Install(IDictionary savedState)
The inner exception System.InvalidOperationException was thrown with the following error message: Cannot start service PreFlight on computer '.'..
at System.ServiceProcess.ServiceController.Start(String[] args)
at System.ServiceProcess.ServiceController.Start()
at Flight.ServiceHost.Installation.OnAfterInstall(IDictionary savedState) in D:\devnet10\Flight\Flight.ServiceHost\Installation.cs:line 49
at System.Configuration.Install.Installer.Install(IDictionary stateSaver)
The inner exception System.ComponentModel.Win32Exception was thrown with the following error message: Access is denied.
The Rollback phase of the installation is beginning.
See the contents of the log file for the D:\devnet10\Flight\Flight.ServiceHost\bin\Debug\flight.servicehost.exe assembly's progress.
The file is located at D:\devnet10\Flight\Flight.ServiceHost\bin\Debug\flight.servicehost.InstallLog.
The Rollback phase completed successfully.
The transacted install has completed.
[更新]
我应该提到我正在运行Windows 10 我设法使用an installer project创建了一个安装程序,它确实起作用。