gpt4 book ai didi

c# - Windows 7 中的 ServiceController 权限

转载 作者:可可西里 更新时间:2023-11-01 08:23:05 25 4
gpt4 key购买 nike

我有一个由服务和可执行文件组成的应用程序。本质上,它是一个表单应用程序,负责在特定情况下启动和停止服务。

在 Windows XP 上,应用程序使用以下代码很好地管理此问题:

ServiceController controller = new ServiceController();
controller.MachineName = ".";
controller.ServiceName = "XXXXXXXXXX";
controller.Stop();
controller.WaitForStatus(ServiceControllerStatus.Stopped, new TimeSpan(0, 0, 10));
controller.Start();

但是在 Windows 7 上,即使我以管理员身份启动应用程序,我也会遇到以下异常:

System.InvalidOperationException: Cannot open XXXXXXXXXXXXX service on computer '.'. ---> System.ComponentModel.Win32Exception: Access is denied
--- End of inner exception stack trace ---
at System.ServiceProcess.ServiceController.GetServiceHandle(Int32 desiredAccess)
at System.ServiceProcess.ServiceController.Start(String[] args)
at System.ServiceProcess.ServiceController.Start()

我可以通过编程方式解决这个问题吗?

最佳答案

当您说您以管理员身份启动应用程序时,您是指在管理员组中的帐户下,还是通过请求管理员凭据的 UAC 提示?如果没有 UAC 凭据提示(或者实际上以管理员帐户而不是管理员组中的帐户运行),您的应用程序没有修改服务的权限,因此您看到的异常是正确的。

这段示例代码可以检查您的应用程序是否以管理员身份运行,如果不是,则启动 UAC 提示。

public static class VistaSecurity
{
public static bool IsAdministrator()
{
WindowsIdentity identity = WindowsIdentity.GetCurrent();

if (null != identity)
{
WindowsPrincipal principal = new WindowsPrincipal(identity);
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}

return false;
}

public static Process RunProcess(string name, string arguments)
{
string path = Path.GetDirectoryName(name);

if (String.IsNullOrEmpty(path))
{
path = Environment.CurrentDirectory;
}

ProcessStartInfo info = new ProcessStartInfo
{
UseShellExecute = true,
WorkingDirectory = path,
FileName = name,
Arguments = arguments
};

if (!IsAdministrator())
{
info.Verb = "runas";
}

try
{
return Process.Start(info);
}

catch (Win32Exception ex)
{
Trace.WriteLine(ex);
}

return null;
}
}

关于c# - Windows 7 中的 ServiceController 权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3892088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com