Выбор "Запуск от имени администратора" в контекстном меню, вызываемом правой кнопкой мыши, работает, но настройка на вкладке совместимости не работает
Мне нужен файл
C:\Program Files (x86)\Common Files\microsoft shared\MSEnv\VSLauncher.exe
автоматически запускаться от имени администратора, в противном случае я не могу открыть файлы *.sln из проводника Windows.
Ранее я решал эту проблему, установив флажок "Запуск от имени администратора" на вкладке совместимости свойств файла, однако это больше не работает. открытие VSLauncher.exe
напрямую ничего не делает, но щелчок правой кнопкой мыши и выбор "Запуск от имени администратора" делает! Все мое devenv.exe
настроены на работу от имени администратора и работают как положено.
Стоит отметить, что это сломалось после некоторых обновлений, возможно, Visual Studio 2010 Service Pack 1.
1 ответ
От запуска Visual Studio 2010 SP1 для запуска с повышенными правами при запуске файлов.sln:
После некоторых исследований я обнаружил, что причина игнорирования Windows моей настройки совместимости заключалась в том, что теперь в VSLauncher.exe был встроен манифест, который содержал следующий фрагмент:
<requestedPrivileges> <requestedExecutionLevel level="asInvoker" uiAccess="false"> </requestedExecutionLevel> </requestedPrivileges>
Итак, VSLauncher.exe теперь указал, что он всегда хотел запускаться на том же уровне выполнения, что и его вызывающая программа. И, разумеется, программа должна знать лучше, чем пользователь, это заставило Windows игнорировать мои собственные настройки уровня выполнения.
А теперь к решению. Поскольку Windows не позволяла мне переопределять то, что программа сказала, что она хотела, мне нужно было переопределить то, что программа сказала, что она хотела.
Для этого я использовал Manifest Tool, который поставляется с Windows SDK (и, следовательно, с Visual Studio):
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, прежде чем манипулировать манифестом.
И выступать на свой страх и риск.