有没有办法在 Windows 10 下以管理员身份运行文件资源管理器

有没有办法在 Windows 10 下以管理员身份运行文件资源管理器

安装 Windows 10 后,我似乎失去了以管理员组用户身份运行 explorer.exe 的能力。

我想要这样做的原因是,在我们团队的开发环境中,我们使用 C# exe 进行一些环境配置,它将在管理员模式下启动命令提示符并替换驱动器。因此,由于文件资源管理器不是以管理员身份运行的,因此这些替换的驱动器在文件资源管理器中不可见。这会有点不方便,有时还会出错。

我能够从任务管理器运行 explorer.exe,并选中“使用权限创建”选项,然后我就可以在资源管理器中看到所有驱动器。但现在这不再起作用了。

我知道还有其他选项可以解决这个工作流程,但只是想确保在 Windows 10 下是否完全不可能?

任何评论都值得赞赏。

答案1

我找到了一种跑步的方法不久前以管理员身份访问 Explorer

  • 启动 regedit.exe 并转到以下键。您应该能够将此字符串复制/粘贴到 regedit 地址栏中:

    HKEY_CLASSES_ROOT\AppID\{CDCBCFCA-3CDC-436f-A4E2-0E02075250C2}

  • 右键单击Permissions并将您的用户设置为密钥的所有者(单击advanced按钮即可获取所有权),并授予您当前的用户写入权限。

在此处输入图片描述

在此处输入图片描述

或使用第三方工具所有权变更完全控制密钥:

  • 下一个,删除或者改名价值运行方式

现在Elevated-Unelevated Explorer Factory(导致被Run As admin忽略)已被禁用,您可以使用管理员权限启动 Explorer。

在此处输入图片描述

注意:完成此操作后,为了以管理员身份启动 Explorer,请不要执行以下操作:任务管理器 > 运行 > explorer.exe,并勾选“以管理员身份”,它将不起作用。而是在桌面上创建一个资源管理器快捷方式,右键单击它并选择“以管理员身份运行”或编辑快捷方式 > 高级 > 以管理员身份运行。

答案2

对于一些小事,比如浏览一个文件夹(如果不提升浏览器权限就无法浏览),我会先提升权限notepad,然后在文件打开对话框中浏览所有目录。右键单击,我可以做很多事情。(这是一个快速的解决方案,基本上可以解决问题。)

答案3

以管理员身份启动命令行。

输入以下命令:

taskkill /im explorer.exe
explorer.exe

答案4

要应用@magicandre1981 接受的解决方案复制并粘贴 PowerShell 脚本,只需从升高PowerShell 提示符:

Function Enable-Privilege 
{
 param([ValidateSet("SeAssignPrimaryTokenPrivilege", "SeAuditPrivilege", "SeBackupPrivilege",
   "SeChangeNotifyPrivilege", "SeCreateGlobalPrivilege", "SeCreatePagefilePrivilege",
   "SeCreatePermanentPrivilege", "SeCreateSymbolicLinkPrivilege", "SeCreateTokenPrivilege",
   "SeDebugPrivilege", "SeEnableDelegationPrivilege", "SeImpersonatePrivilege", "SeIncreaseBasePriorityPrivilege",
   "SeIncreaseQuotaPrivilege", "SeIncreaseWorkingSetPrivilege", "SeLoadDriverPrivilege",
   "SeLockMemoryPrivilege", "SeMachineAccountPrivilege", "SeManageVolumePrivilege",
   "SeProfileSingleProcessPrivilege", "SeRelabelPrivilege", "SeRemoteShutdownPrivilege",
   "SeRestorePrivilege", "SeSecurityPrivilege", "SeShutdownPrivilege", "SeSyncAgentPrivilege",
   "SeSystemEnvironmentPrivilege", "SeSystemProfilePrivilege", "SeSystemtimePrivilege",
   "SeTakeOwnershipPrivilege", "SeTcbPrivilege", "SeTimeZonePrivilege", "SeTrustedCredManAccessPrivilege",
   "SeUndockPrivilege", "SeUnsolicitedInputPrivilege")]$Privilege,
  $ProcessId = $pid,
  [Switch]$Disable)

   $Definition = @'
 using System;
 using System.Runtime.InteropServices;

 public class AdjPriv
 {
  [DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
  internal static extern bool AdjustTokenPrivileges(IntPtr htok, bool disall,
   ref TokPriv1Luid newst, int len, IntPtr prev, IntPtr relen);

  [DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
  internal static extern bool OpenProcessToken(IntPtr h, int acc, ref IntPtr phtok);
  [DllImport("advapi32.dll", SetLastError = true)]
  internal static extern bool LookupPrivilegeValue(string host, string name, ref long pluid);
  [StructLayout(LayoutKind.Sequential, Pack = 1)]
  internal struct TokPriv1Luid
  {
   public int Count;
   public long Luid;
   public int Attr;
  }

  internal const int SE_PRIVILEGE_ENABLED = 0x00000002;
  internal const int SE_PRIVILEGE_DISABLED = 0x00000000;
  internal const int TOKEN_QUERY = 0x00000008;
  internal const int TOKEN_ADJUST_PRIVILEGES = 0x00000020;
  public static bool EnablePrivilege(long processHandle, string privilege, bool disable)
  {
   bool retVal;
   TokPriv1Luid tp;
   IntPtr hproc = new IntPtr(processHandle);
   IntPtr htok = IntPtr.Zero;
   retVal = OpenProcessToken(hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok);
   tp.Count = 1;
   tp.Luid = 0;
   if(disable)
   {
    tp.Attr = SE_PRIVILEGE_DISABLED;
   }
   else
   {
    tp.Attr = SE_PRIVILEGE_ENABLED;
   }
   retVal = LookupPrivilegeValue(null, privilege, ref tp.Luid);
   retVal = AdjustTokenPrivileges(htok, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero);
   return retVal;
  }
 }
'@

 $processHandle = (Get-Process -id $ProcessId).Handle
 $type = Add-Type $definition -PassThru
 $type[0]::EnablePrivilege($processHandle, $Privilege, $Disable)
}

$path = 'HKLM:\Software\Classes\AppID\{CDCBCFCA-3CDC-436f-A4E2-0E02075250C2}'

$acl = Get-Acl $path
$originalOwner = $acl.GetOwner([System.Security.Principal.NTAccount]).Value
$acl.SetOwner((New-Object System.Security.Principal.NTAccount([System.Security.Principal.WindowsIdentity]::GetCurrent().Name)))
$acl | Set-Acl $path

Rename-ItemProperty -LiteralPath $path -Name "RunAs" -NewName "__RunAs";

$acl = Get-Acl $path
$acl.SetOwner((New-Object System.Security.Principal.NTAccount($originalOwner)))
Enable-Privilege SeRestorePrivilege
$acl | Set-Acl $path

它将RunAs值名称重命名为__RunAs

相关内容