【问题标题】:How to elevate .net application permissions?如何提升 .net 应用程序权限?
【发布时间】:2011-11-13 03:58:16
【问题描述】:

我有一个应用程序,它会在启动时检查更新,如果找到更新,它会通过网络将一些文件复制到程序文件文件夹中。显然这种任务在正常情况下Standard Users是做不到的。

我尝试创建一个服务来执行更新过程,但我遇到了一些安全问题,我在超级用户中asked this question 对此进行了讨论。

现在,考虑到大多数应用程序需要提升权限来执行此类任务这一事实,我认为这可能是正确的方法。但是,我如何在包括 XP 在内的所有 Windows 版本下请求升级程序。我发现了很多关于清单文件的主题,但由于我需要它来使用 XP,我无法专门为 UAC 创建解决方案。

【问题讨论】:

    标签: windows security elevated-privileges


    【解决方案1】:

    权限只能在进程启动时提升;无法提升正在运行的进程的权限。为了提升现有应用程序,必须使用动词“runas”创建应用程序进程的新实例:

    private static string ElevatedExecute(NameValueCollection parameters)
    {
        string tempFile = Path.GetTempFileName();
        File.WriteAllText(tempFile, ConstructQueryString(parameters));
    
        try
        {
            ProcessStartInfo startInfo = new ProcessStartInfo();
            startInfo.UseShellExecute = true;
            startInfo.WorkingDirectory = Environment.CurrentDirectory;
            Uri uri = new Uri(Assembly.GetExecutingAssembly().GetName().CodeBase);
            startInfo.FileName = uri.LocalPath;
            startInfo.Arguments = "\"" + tempFile + "\"";
            startInfo.Verb = "runas";
            Process p = Process.Start(startInfo);
            p.WaitForExit();
            return File.ReadAllText(tempFile);
        }
        catch (Win32Exception exception)
        {
            return exception.Message;
        }
        finally
        {
            File.Delete(tempFile);
        }
    }
    

    用户确认以管理员身份执行程序后,在没有UI的情况下执行同一应用程序的另一个实例;一个可以显示在没有提升权限的情况下运行的 UI,另一个可以在后台运行并具有提升的权限。第一个进程一直等到第二个进程完成执行。如需更多信息和工作示例,您可以查看MSDN archive

    为了防止在一些冗长的进程中间出现所有这些对话框恶作剧,您需要以embedding the appropriate manifest in your application 提升的权限运行整个主机进程,以要求“最高可用”执行级别:这将导致 UAC 提示在您的应用启动后立即出现,并导致所有子进程以提升的权限运行而无需额外提示。

    【讨论】:

      猜你喜欢
      • 2011-05-21
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      • 2014-07-15
      • 2012-02-13
      • 2016-12-16
      • 1970-01-01
      • 2010-11-27
      相关资源
      最近更新 更多