我有一个注册表添加项,允许以管理员身份打开 cmd.exe 中的任何文件夹,但它要求 cmd.exe 始终以管理员身份运行。
您无法更改 cmd.exe 本身来执行此操作,因为它受到保护。
但我以前在某处找到过说明(现在找不到了),通过更改安全性(我猜是更改权限)来实现这一点。创建硬链接后,您必须将其改回来,否则它将无法正常工作。
所以我相信这个过程是:
- 更改cmd.exe的权限
- 创建 cmd.exe 的硬链接(类似于 cmdAdmin.exe)
- 将 cmdAdmin.exe 设置为始终以管理员身份运行
- 恢复 cmd.exe 的权限
有人知道我需要更改的权限(或任何属性)吗?
答案1
如果我猜得没错,请查看 cmd.exe 调用的注册表内容。改用类似以下内容:
powershell -Command "Start-Process cmd -ArgumentList '/s /k pushd \"%V\"' -Verb RunAs"
- “%V”是Windows资源管理器传递的当前目录。
- 动词“RunAs”指示 powershell 升级该过程。您可以看到所有可用的选项。开始进程 这里。
我习惯一开始就禁用 UAC,但现在,我认为这不是一个好主意。你所做的大多数事情都不应该产生愚蠢的 UAC 对话框。这是一个很好的警告,可以提醒你“嘿!坏东西可以发生在这里。这个过程可以为所欲为。”
答案2
这是XY问题。您无需创建任何硬链接即可以管理员身份运行 cmd。有多种方法可以创建一个以管理员身份运行 cmd 的菜单项
最简单的方法是应用 Andrew Richards 的增强“在此处打开命令提示符”上下文菜单体验进行调整,可以选择以正常权限或提升权限运行 cmd/powershell/bash
只需导入下面的 *.reg 文件(或从上面的 MSDN 博客复制)
Windows Registry Editor Version 5.00
; Command Prompt
[HKEY_CLASSES_ROOT\Directory\shell\01MenuCmd]
"MUIVerb"="Command Prompts"
"Icon"="cmd.exe"
"ExtendedSubCommandsKey"="Directory\\ContextMenus\\MenuCmd"
[HKEY_CLASSES_ROOT\Directory\background\shell\01MenuCmd]
"MUIVerb"="Command Prompts"
"Icon"="cmd.exe"
"ExtendedSubCommandsKey"="Directory\\ContextMenus\\MenuCmd"
[HKEY_CLASSES_ROOT\Directory\ContextMenus\MenuCmd\shell\open]
"MUIVerb"="Command Prompt"
"Icon"="cmd.exe"
[HKEY_CLASSES_ROOT\Directory\ContextMenus\MenuCmd\shell\open\command]
@="cmd.exe /s /k pushd \"%V\""
[HKEY_CLASSES_ROOT\Directory\ContextMenus\MenuCmd\shell\runas]
"MUIVerb"="Command Prompt Elevated"
"Icon"="cmd.exe"
"HasLUAShield"=""
[HKEY_CLASSES_ROOT\Directory\ContextMenus\MenuCmd\shell\runas\command]
@="cmd.exe /s /k pushd \"%V\""
; PowerShell
[HKEY_CLASSES_ROOT\Directory\shell\02MenuPowerShell]
"MUIVerb"="PowerShell Prompts"
"Icon"="powershell.exe"
"ExtendedSubCommandsKey"="Directory\\ContextMenus\\MenuPowerShell"
[HKEY_CLASSES_ROOT\Directory\background\shell\02MenuPowerShell]
"MUIVerb"="PowerShell Prompts"
"Icon"="powershell.exe"
"ExtendedSubCommandsKey"="Directory\\ContextMenus\\MenuPowerShell"
[HKEY_CLASSES_ROOT\Directory\ContextMenus\MenuPowerShell\shell\open]
"MUIVerb"="PowerShell"
"Icon"="powershell.exe"
[HKEY_CLASSES_ROOT\Directory\ContextMenus\MenuPowerShell\shell\open\command]
@="powershell.exe -noexit -command Set-Location '%V'"
[HKEY_CLASSES_ROOT\Directory\ContextMenus\MenuPowerShell\shell\runas]
"MUIVerb"="PowerShell Elevated"
"Icon"="powershell.exe"
"HasLUAShield"=""
[HKEY_CLASSES_ROOT\Directory\ContextMenus\MenuPowerShell\shell\runas\command]
@="powershell.exe -noexit -command Set-Location '%V'"
; Ensure OS Entries are on the Extended Menu (Shift-Right Click)
[HKEY_CLASSES_ROOT\Directory\shell\cmd]
"Extended"=""
[HKEY_CLASSES_ROOT\Directory\background\shell\cmd]
"Extended"=""
[HKEY_CLASSES_ROOT\Directory\shell\Powershell]
"Extended"=""
[HKEY_CLASSES_ROOT\Directory\background\shell\Powershell]
"Extended"=""
答案3
使用内置的 Windows VB.Net 编译器来提升。
RunAsAdminConsole.exe
创建提升的控制台或运行使控制台提升的命令。程序会提示输入凭据。将以下三个文本文件复制到文件夹中,然后双击批处理文件。
将其放入快捷方式的优点是管理员图标覆盖会出现在快捷方式的图标上。如果您只是在兼容性选项卡中勾选以管理员身份运行,则不会出现图标覆盖。
REM Three files follow
REM RunAsAdminConsole.bat
REM This file compiles RunAsAdminconsole.vb to RunAsAdminconsole.exe using the system VB.NET compiler.
REM Runs a command elevated using a manifest OR elevates the current console without parameters.
C:\Windows\Microsoft.NET\Framework\v4.0.30319\vbc "%~dp0\RunAsAdminconsole.vb" /win32manifest:"%~dp0\RunAsAdmin.manifest" /out:"%~dp0\RunAsAdminConsole.exe" /target:exe
REM To use
rem RunAsAdminconsole
pause
;RunAsAdminConsole.vb
imports System.Runtime.InteropServices
Public Module MyApplication
Public Sub Main ()
Dim wshshell as object
WshShell = CreateObject("WScript.Shell")
Shell("cmd.exe /k " & Command())
End Sub
结束模块
命名此文件RunAsAdmin.manifest
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="*"
name="Color Management"
type="win32"
/>
<description>Serenity's Editor</description>
<trustinfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedprivileges>
<requestedexecutionlevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
从https://winsourcecode.blogspot.com/2019/12/rem-three-files-followrem.html