【问题标题】:Forced the application to have the administrator privileges强制应用程序具有管理员权限
【发布时间】:2012-04-19 11:48:56
【问题描述】:

我需要授予我的应用程序管理员权限,因为我知道它将从用户会话而不是管理员帐户运行。

我查看了其他网站,但找不到任何有用的东西。

我尝试编辑清单以及其他内容,并插入了以下行:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

这在尝试使用 ClickOnce 发布时给了我一个错误,但在我调试时却没有。

你能帮帮我吗?

【问题讨论】:

    标签: c# clickonce privileges administrator


    【解决方案1】:

    首先 - 实际上,设计不允许以管理员身份安装和 ClickOnce 应用程序:http://msdn.microsoft.com/en-us/library/142dbbz4(v=vs.90).aspx

    看看这个帖子:http://antscode.blogspot.ca/2011/02/running-clickonce-application-as.html - 它解释了如何以管理员身份运行 ClickOnce 应用程序。但是——不得不说我已经走过了这条路——而且我运气不太好。我在使用这种方法时遇到了很多麻烦(尝试以管理员权限运行 ClickOnce 应用程序)。据我回忆,最大的问题是自动更新无法正常工作。更不用说非管理员用户可能需要一直输入管理员凭据。

    所以我的建议是重新考虑您的逻辑,并将您需要以管理员身份完成的部分封装在单独的 EXE 文件中 - 并让用户非常清楚地知道当他点击 THAT按钮,将显示 UAC 提示(可能通过在按钮上添加“盾牌”图标)。在那个 button_click 事件中做这样的事情:

    // 2. Run Photoshop action on this image (and wait for the task to complete)
    if (string.IsNullOrWhiteSpace(this.PhotoshopEnhanceActionAbsPath) == false)
    {
        var pi = new ProcessStartInfo(this.PhotoshopEnhanceActionAbsPath,  "\"" + imgPhotoshopActionAbsPath + "\"");
        pi.UseShellExecute = true;
        pi.Verb = "runas";
        var photoshopAction = Process.Start(pi);
        var success = photoshopAction.WaitForExit();
        if (success == false)
        {
            // do something here
        }                
    }
    

    这种方法对我来说效果很好。这里的关键是:

    pi.UseShellExecute = true;
    pi.Verb = "runas";
    

    它以管理员权限运行您的 EXE - 因此此时将显示 UAC 提示。这里的另一个很好的结果是,用户可能不会在每次使用应用程序时都运行这个特定的逻辑——因此当他们不需要它时,他们不会被提示惹恼。

    【讨论】:

    • @Matth 对不起,我不清楚你的问题。目标是在提升模式下运行一些代码。除非您是管理员,否则您需要该提示来提升您的应用。
    • 将使用此应用程序的工程师是计算机上的用户帐户。应用程序执行需要管理员的权限过程。出于安全原因,在外面提供他们的管理员帐户是不可能的。我只想对用户透明。同样的原理,由于命令 p.StartInfo.UserName = "user" p.StartInfo.Password = "secret",我已经设法在没有 UAC 的情况下调用调用程序,但唯一担心的是显示了我的命令提示符。虽然我喜欢它在后台运行。
    • 你试过ProcessStartInfo.WindowStyle msdn.microsoft.com/en-us/library/…
    • 是的,我尝试:进程克隆 = new Process(); System.Security.SecureString secret = new system.Security.SecureString(); foreach (char c in pwd) secret.AppendChar(c); clone.StartInfo.UserName = 用户; clone.StartInfo.Password = 秘密; clone.StartInfo.FileName = "dsfo.exe"; clone.StartInfo.Arguments = lblAdress.Text + @" 0 0 " + tmp + "ADC.img"; clone.StartInfo.UseShellExecute = false; clone.StartInfo.CreateNoWindow = true; clone.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; clone.Start();
    【解决方案2】:

    我很确定这种行为是设计使然。

    ClickOnce 应用程序旨在无需管理员权限即可安装。无法在运行时提升它们,因为这意味着实际上没有管理员权限的用户可以安装然后以管理员身份运行应用程序;这将是一个安全风险。

    【讨论】:

      猜你喜欢
      • 2015-05-07
      • 2012-01-29
      • 2015-05-09
      • 1970-01-01
      • 2013-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-31
      相关资源
      最近更新 更多