RUNASADMIN в реестре, похоже, не работает в Windows 7

некоторое время установщик моей программы использовал приведенный ниже код для запуска моего приложения с правами администратора. Но это видимо не действует под Windows 7. В Vista он работал красиво. Если я щелкну Правой Кнопкой Мыши ярлык и скажу, чтобы он запускался как администрирование, программа запустится нормально. Но, используя приведенный ниже код, его следует заставить запускать программу таким образом все время. Теперь уже нет. Кто-нибудь знает, использует ли Win 7 Этот ключ? ОАК тоже по путь.

Registry.SetValue(@"HKEY_CURRENT_USERSoftwareMicrosoftWindows NT
CurrentVersionAppCompatFlagsLayers", "C:Appapp.exe", "RUNASADMIN");

спасибо.

5 ответов


Я использую Windows 7, и я вижу такие ключи. Однако я не думаю, что это правильный способ настройки вашего приложения и установщика.

моя рекомендация заключается в том, что вы распространяете файл манифеста вместе с вашим приложением (app.исполняемый.) Файл манифеста может быть даже встроен в исполняемый файл легко, если вы используете Visual Studio 2008 с. Затем в файле манифеста вам может потребоваться администратор права.

http://msdn.microsoft.com/en-us/library/bb756929.aspx

http://blogs.msdn.com/shawnfa/archive/2006/04/06/568563.aspx

http://channel9.msdn.com/posts/jmazner/How-To-Tell-Vistas-UAC-What-Privelege-Level-Your-App-Requires/


у меня есть ответ/решение для этого вопроса.

во-первых, я не согласен (с уважением) с комментарием, что использование AppCompatFlags не является "правильным способом настройки вашего приложения и установщика."Изменение этого раздела реестра-это просто зеркальное отображение с помощью графического интерфейса Windows для изменения уровня привилегий исполняемого файла. Я считаю, что этот метод проще реализовать, чем добавить файл манифеста. Если пользователь хочет изменить уровень привилегий, чтобы не работать Администратор, они могут сделать это легко с GUI.

во всяком случае, у меня была такая же проблема с попыткой установить уровень привилегий исполняемого файла для запуска от имени администратора. Мы знаем, что мы можем установить его с помощью GUI:

  • щелкните правой кнопкой мыши на ярлык или .EXE-файл и выберите Свойства
  • перейдите на вкладку Совместимость
  • (в этот момент Вы можете установить уровень привилегий только для вас или для всех пользователей, я предпочитаю делать это для всех пользователи)
  • Нажмите кнопку, измените настройки для всех пользователей
  • откроется новое окно свойств с вкладкой "совместимость для всех пользователей"
  • в разделе Проверка уровня привилегий на "запуск этой программы от имени администратора" нажмите OK несколько раз, чтобы сохранить изменения.

когда изменения будут сохранены, вы найдете параметр в реестре:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\Program Files (x86)\My Program\My Program.exe"="RUNASADMIN"

когда я поставил .exe для запуска от имени администратора с помощью GUI в так всегда получается.

однако, всякий раз, когда я пытался изменить реестр напрямую, не проходя через GUI, программа просто не будет работать как администратор. Реестр показывает, что я внес изменения, и когда я смотрю на уровень привилегий для исполняемого файла, Запуск от имени администратора проверены на.

Я пробовал несколько разных способов сделать .exe Запуск от имени администратора, просто изменив реестр:

  • вручную редактировал реестра с помощью команды regedit
  • импортировать изменения из
  • используется инструмент командной строки reg.exe для изменения реестра
  • используется ныне несуществующий Wise Script tool
  • Используется В AutoIt Скриптов

все эти методы сделали то же самое. Реестр был изменен, и GUI показал, что программа должна работать от имени администратора, но программа никогда не работает от имени администратора.

исправление, для эта проблема, на которую я наткнулся, - это пойти вперед и изменить оба HKCU ключ HKLM ключ настройки.

[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\Program Files (x86)\My Program\My Program.exe"="RUNASADMIN"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\Program Files (x86)\My Program\My Program.exe"="RUNASADMIN"

если вы измените оба этих раздела реестра, то .exe будет работать как администратор. Что еще более важно, если другой пользователь входит в систему на ПК, программа будет запускаться от имени администратора. Это несмотря на то, что изменение реестра не производится в разделе HKCU для последующего пользователя.

Я не знаю, что здесь происходит, но это работает.


в win7,RUNASADMIN ПОМЕЩАЕТСЯ В КЛАВИШУ : когда HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers используя install shield 5.1, значения копируются в appcpmctflgsin wow6432node и exe actualy falis для запуска от имени администратора.


этот ответ Робен работает "для exe-файла, который я не создавал", который вы выразили как интерес к вашему комментарию ответ Лекса ли. Он использует вашу оригинальную идею реестра.

два, возможно, существенных изменений:

  1. С 32-битной ОС мне не нужно беспокоиться о Wow6432Node (озабоченность, упомянутая "uss")
  2. С помощью HKLM вместо HKCU, мне не нужно беспокоиться о том, что пользователь выполняет приложение (озабоченность, упомянутая Лео).

Я использовал CMD для добавления этой записи в реестр, используя следующую команду:

reg ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /t REG_SZ /f /v "C:\Program Files (x86)\MyApp\myapp.exe" /d RUNASADMIN

это хорошо работает в Win8Pro-32Bit, но не работает на 64-битной версии!
Я обнаружил, что запуск этой команды на 64-битной победе (проходит через 32-битный установщик как заключительный этап установки), приводит к созданию записи на HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers!
После некоторых исследований (спасибо моему другу г-ну Х. Туси), мы нашли правильное решение.
ПРОСТО ДОБАВЬТЕ /reg:64 В конце предыдущей команды:

reg ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /t REG_SZ /f /v "C:\Program Files (x86)\MyApp\myapp.exe" /d RUNASADMIN /reg:64

и все нормально как в 32, так и в 64-битных ОС(Win 7 32Bit, Win 8 32Bit, Win 8.1 64Bit).