Выбор "Запуск от имени администратора" в контекстном меню, вызываемом правой кнопкой мыши, работает, но настройка на вкладке совместимости не работает

Мне нужен файл

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, прежде чем манипулировать манифестом.
И выступать на свой страх и риск.

Другие вопросы по тегам