有时以管理员身份运行

时间:2008-10-29 23:43:56

标签: c# windows-vista uac

我有一个程序需要在大多数时间以普通用户身份运行,但偶尔我需要停止并启动服务。我如何制作一个大多数时间以普通用户身份运行的程序,但是为某些功能升级到管理员模式?

3 个答案:

答案 0 :(得分:2)

一旦流程运行,您就无法提升流程,但您可以: -

以提升

重新启动流程
private void elevateCurrentProcess()
{
    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.UseShellExecute = true;
    startInfo.WorkingDirectory = Environment.CurrentDirectory;       
    startInfo.FileName = Application.ExecutablePath;
    startInfo.Verb = "runas";

    try
    {
        Process p = Process.Start(startInfo);
    }
    catch
    {
        // User didn't allow UAC
        return;
    }
    Application.Exit();
}

这种方法意味着您的流程继续升级,UAC宣传不再是好事和坏事,取决于您的受众。

将需要提升的代码放入单独的exe

将清单设置为requireAdministrator并将其作为单独的进程启动。见sample code

此方法表示每次运行操作时都会显示UAC。

最佳方法取决于您的受众(管理员类型与否)以及提升操作的频率。

答案 1 :(得分:1)

据我所知,您需要启动一个以管理员身份运行的单独进程。一旦进程已经启动,就不会提升进程。

请参阅this question

答案 2 :(得分:0)

您需要使用所谓的模拟..

[http://support.microsoft.com/kb/306158][1]

以上显示了如何为ASP.Net应用程序完成它,但代码可能与您的需求几乎相同。