避免从 shell 启动 explorer 以提升程序的 UAC

避免从 shell 启动 explorer 以提升程序的 UAC

我是 Windows 7 管理员组的成员。我需要foo.exe从 Cmd 或 Powershell 运行。exe 文件需要提升权限才能运行,但其清单中未指定提升权限。

通常我必须start .打开资源管理器,右键单击 exe 并选择以管理员身份运行。

有没有更简单的方法?我不会关闭 UAC,我不想让密码被记住或避免提示。我只是想避免启动 Explorer 窗口。

我是管理员组的成员。我不想以其他用户身份运行,我只想看到我自己在 Explorer 中单击右键时看到的无密码 UAC 提示,但不需要打开 Explorer、运行第三方工具、禁用 UAC、从脚本执行相同操作或记住凭据。

我只想调用通常的 UAC 提示,无需中间步骤。

为了澄清起见,我想要以下序列:

  1. Windows 7,UAC 开启,我在管理员组,UAC 提示设置为回答是/否。

  2. 打开非提升的命令提示符并导航到深层文件夹并执行其他任务。

  3. 我运行“elevate-command-sequence foo.exe”,UAC 提示打开的方式与我在 Explorer 中右键单击时打开的方式完全相同。foo.exe 的当前目录设置为我所在的深层文件夹。

我想知道elevate-command-sequence在 cmd 或 powershell 中是否存在这样的功能。

答案1

如果命令提示符本身未在提升状态下启动,则它无法本地启动提升的应用程序。这很糟糕,但这只是 Windows 行为的一部分。

如果你想解决这个问题,你必须使用第三方工具来为你启动提升的程序。通过快速谷歌搜索,我发现电力需求侧管理,这将允许您从非提升的命令提示符(当然是在 UAC 弹出之后)以提升的状态运行程序

c:\>ele foo.exe  

我确信还有一百万个程序可以做到这一点,哎呀,我可以在这个答案中用 C# 编写一个。

namespace Sandbox_Console
{
    public class Program
    {

        private static void Main(string[] args)
        {
            Process newProcess = new Process();
            newProcess.StartInfo.Verb = "runas";
            newProcess.StartInfo.WorkingDirectory = Environment.CurrentDirectory;
            newProcess.StartInfo.FileName = args[0];
            newProcess.StartInfo.Arguments = String.Join(" ", args, 1, args.Length - 1);
            newProcess.Start();
        }
    }
}

现在代码非常脆弱,它现在无法处理参数中的空格之类的东西,但添加起来并不困难。

答案2

也许这个组策略设置更改可能会对您有所帮助:

  1. 开始--> run-->gpedit.msc

  2. 导航 Computer Configuration --> Policies-->Windows Settings-->Security Settings -->Local Policies-->Security Options

在此处输入图片描述

3.改变behavior of elevation prompt for administrator(你可以按照你想要的方式导出)

重新启动计算机以使更改生效

答案3

这个问题在这里得到合理的回答:https://superuser.com/a/420317/98646

powershell Start-Process cmd.exe -Verb RunAs

当然,cmd.exe只是一个占位符。

相关内容