在右键单击上下文菜单中选择“以管理员身份运行”有效,但在兼容性选项卡中设置它无效

在右键单击上下文菜单中选择“以管理员身份运行”有效,但在兼容性选项卡中设置它无效

我需要文件

C:\Program Files (x86)\Common Files\microsoft shared\MSEnv\VSLauncher.exe 

自动以管理员身份运行,否则我无法从 Windows 资源管理器打开 *.sln 文件。

我之前曾通过选中文件属性的兼容性选项卡中的“以管理员身份运行”复选框来解决这个问题,但是这不再起作用了。VSLauncher.exe直接打开没有任何作用,但右键单击它并选择“以管理员身份运行”就可以了!我的所有程序devenv.exe都设置为以管理员身份运行,并且它们按预期运行。

值得注意的是,这个问题在一些更新之后出现了,可能是 Visual Studio 2010 Service Pack 1。

答案1

启动 .sln 文件时让 Visual Studio 2010 SP1 以提升的权限运行

经过一番研究,我发现 Windows 忽略我的兼容性设置的原因是 VSLauncher.exe 现在嵌入了一个清单,其中包含以下片段:

<requestedPrivileges>
   <requestedExecutionLevel level="asInvoker" uiAccess="false">
   </requestedExecutionLevel>
</requestedPrivileges>

因此,VSLauncher.exe 现在指定它始终希望在与其调用者相同的执行级别上运行。而且,由于程序当然比用户更了解情况,这导致 Windows 忽略我自己的执行级别设置。

现在,来看看解决方案。由于 Windows 不允许我覆盖程序所说的内容,所以我需要覆盖程序所说的内容。

为此,我使用了 Windows SDK(以及 Visual Studio)附带的 Manifest Tool:

mt -inputresource:"VSLauncher.exe" -out:VSLauncher.exe.manifest

此命令将清单从 VSLauncher.exe 中提取到名为 VSLauncher.exe.manifest 的文件中。然后我编辑了清单以请求所需的执行级别:

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

然后,我可以写回清单:

mt -outputresource:VSLauncher.exe -manifest VSLauncher.exe.manifest

得到想要的结果。

需要注意的是:操作清单之前,请备份 VSLauncher.exe。
操作风险由您自行承担。

相关内容