最近从 Vista 32 位迁移到 Windows 7 64 位,我的一个程序现在需要管理员权限。
我使用了一个相当奇特的文本编辑器(Crimson Editor)。虽然不是为 Vist/Win7 设计的,但它与 Vista 配合得很好。但是在 Windows 7 下,程序可执行文件会将此 UAC 屏蔽添加到其图标(即使未设置兼容性选项卡中的“以管理员身份运行”标志)并在我运行时提示提升。
Win7 如何确定这个类似记事本的应用程序需要管理员权限?我怎样才能覆盖这个错误的启发式?
与我的其他问题相关,我需要能够以管理员身份运行命令提示符。每当我从“开始”菜单或通过双击C:\Windows\System32\cmd.exe文件资源管理器中的文件启动命令提示符时,它都会以提升的权限运行它。
我怎样才能运行它,让它只在正常的非高架模式下运行?Cmd.exe 不需要以管理员身份运行,通常当您启动它时,它不会以管理员身份运行,但出于某种原因,它默认在这台机器上以管理员身份运行。这是在 Windows Server 2012 R2 服务器上。我登录的帐户具有管理员权限(但它不是默认的内置管理员用户帐户),我能想到的唯一解决方法是以没有管理员权限的其他用户身份运行它,这将要求我先在服务器上创建一个非管理员帐户,这似乎过分了。有更容易的方法吗?
如果我的 cmd.exe 窗口在标题栏中显示“管理员”,表明它是以提升的权限启动的,这是否意味着我从这个命令窗口执行的任何内容也以提升的权限运行?
具体来说,如果我运行类似的东西:
msiexec SomeProgram.msi
Run Code Online (Sandbox Code Playgroud)
我的安装程序是否以提升的权限运行,因为它是从以提升的权限运行的 cmd.exe 执行的?
更具体地说:我想知道显示 UI 并立即在 cmd.exe 窗口中返回提示的应用程序(如msiexec上面的调用)是否正在以提升的权限执行。
我在 Windows 7 中的帐户是管理员帐户。当我打开运行框 (WinKey + R) 时,我收到警告,“此任务将使用管理权限创建。”

有没有办法以我自己的身份运行程序,但以管理员身份登录时没有管理权限?
这是我之前的问题的后续: 如何在 Windows 7 中强制任何程序在没有管理员权限的情况下运行?
首先,我不知道为什么没有选项至少可以尝试在没有特权的情况下运行任何程序。如果它崩溃、抛出错误或退出,那么我可能会给它管理员权限。
我正在寻找一个 UNIX 风格的解决方案:如果我以“sudo”的身份运行它,然后给它管理员权限。如果我没有用“sudo”作为前缀,那么用普通权限运行它,如果它想让它崩溃。
我更喜欢不需要第三方软件的解决方案。没有充分的理由为什么不应该将此选项包含在操作系统中,除非负责设计 UAC 的人故意使 UAC 变得烦人和有问题,导致沮丧的用户禁用 UAC 或四处走动具有管理员权限和橡皮图章每个权限提升请求。
我还没有找到关于如何强制任何程序至少尝试在正常/非提升模式下运行的好答案。
所以我做了一些进一步的研究,发现:http : //technet.microsoft.com/en-us/library/cc709628%28v=ws.10%29.aspx
本文描述了 UAC 中一个非常愚蠢的功能,称为“安装程序检测”。
以下是文章的简短引述:
在创建 32 位进程之前,会检查以下属性以确定它是否为安装程序:
(结束报价)
这有多愚蠢?因为一个程序在其属性中包含一些关键字,所以我不能在正常模式下运行它?
所以我寻找了关于如何禁用它的说明,只有专业版和终极版的说明。我有家庭高级版。
如果几乎所有东西都需要管理员权限,那么拥有 UAC 有什么意义?也可能有一个只有管理员和来宾帐户的操作系统,两者之间没有任何内容。
Windows XP 中的特权提升系统在各方面都更简单、更好。有没有办法让 Windows 7 中的权限像 Windows XP 一样工作?
仅供参考:我正在 Windows 7 安装上的标准(非管理员)帐户上进行所有测试。
我有一个脚本需要以管理员身份运行,但然后在非提升的上下文中运行单个命令。我之前使用的是runas /trustlevel:0x20000 program.exe,但在将 Windows 11 更新到 22H2 后,该命令现在给出以下输出(此处以运行记事本为例):
PS > runas /trustlevel:0x20000 notepad
RUNAS ERROR: Unable to run - notepad
87: The parameter is incorrect.
Run Code Online (Sandbox Code Playgroud)
我已经仔细检查了 trustlevel 参数值,它似乎是正确的:
PS > runas /showtrustlevels
The following trust levels are available on your system:
0x20000 (Basic User)
Run Code Online (Sandbox Code Playgroud)
我尝试的任何应用程序都会发生这种情况,而不仅仅是记事本或我的脚本中的应用程序。我还在 Powershell 7、Windows Powershell (5) 和命令行中尝试过,但没有区别。Runas 本身并没有完全损坏,正如我可以做到的runas /profile /env /user:<username> notepad,它会启动(输入我的密码后)。我也做了sfc /scannow以防万一的事情,但这没有什么区别。
我目前正在尝试弄清楚是否有什么我可以在这里做的,或者该功能是否刚刚在 22H2 被弃用。
在 Windows Vista 和 Windows 7 中,任务管理器以非提升方式运行,除非您选择“查看所有用户的进程”,否则您不会遇到 UAC 提示。
在 Windows 8 Preview 中,任务管理器每次都开箱即用。 如何将其配置为以非提升方式启动,以便每次检查 CPU 使用率或查看正在运行的进程列表以查看应用程序是否完全关闭时都不会收到 UAC 提示?
(我不是在寻找涉及削弱 UAC 的答案,我请求社区帮助拒绝任何此类建议。)
Image Execution Options如果您需要修改要启动的应用程序的行为,则HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options具有以可执行文件命名的键和字符串 () 值的 ( )已知REG_SZ是一个不错的 inroute。
但是,如果我的可执行文件有一个非常常见的名称,例如launcher.exe,我怎样才能更具体一些呢?我可以吗?
我想确保只有我想到的特定二进制文件会受到影响,尽管在我的特定用例中,如果我不能将其限制为确切的可执行文件,那么它只会产生中等影响。
我想为自己编写一个小包装程序,类似于 Sysinternals 的 Process Explorer,它取代了我的特定标准行为launcher.exe,因为它设置了类似于set __COMPAT_LAYER=RUNASINVOKERshell 中的环境变量。
现在我知道如何编写包装器和所有内容,主要问题是,是否有一种方法可以在注册表中告诉,使用下面的一些魔法Image Execution Options来限制值“hack”的范围,Debugger或者我是否必须在其中过滤它我的包装纸?
涉及到:
windows-7 ×5
uac ×4
cmd.exe ×1
command-line ×1
debug ×1
debugger ×1
elevation ×1
permissions ×1
powershell ×1
privileges ×1
runas ×1
task-manager ×1
windows ×1
windows-11 ×1
windows-8 ×1
windows-8.1 ×1