3

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

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

автоматически запускаться от имени администратора, в противном случае я не могу открыть файлы * .sln из проводника Windows.

Ранее я решал эту проблему, установив флажок "Запуск от имени администратора" на вкладке совместимости свойств файла, однако это больше не работает. Открытие VSLauncher.exe напрямую ничего не делает, но щелчок правой кнопкой мыши по нему и выбор "Запуск от имени администратора" делает! Все мои devenv.exe настроены на работу с правами администратора и работают как положено.

Стоит отметить, что это сломалось после некоторых обновлений, возможно, Visual Studio 2010 Service Pack 1.

1 ответ1

3

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .