我需要文件
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。
操作风险由您自行承担。