2016-09-11 3 views
1

Предположим, я хочу сменить раздел реестра на следующий скрипт.Повышающая привилегия для сценариев C#

RegistryKey myKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Company\\SomeFolder", true); 

if(myKey != null) 
{ 
    myKey.SetValue("NameXYZ", "1", RegistryValueKind.String); 
    myKey.Close(); 
} 

Значение не изменяется, потому что у меня нет привилегий. Одним из способов изменения значения ключа реестра является, например, запустите VS с правами администратора, а затем запустите сценарий. Но есть ли способ установить повышенную привилегию для любых скриптов C# (.csx), а затем выполнить этот скрипт, например. VS с нормальными привилегиями?

+0

Нет, не совсем. Зависит от выполнения сценария. Если вы сделаете это из интерактивного окна C#, вы должны выполнить VS повышенный уровень. Если вы сделаете это с помощью csi.exe, тогда вы должны запустить программу, которая запрашивает возвышение с помощью своего манифеста или runas и разрешить запуск csi.exe. –

ответ

-1

Вы можете посмотреть в System.Security.Permissions как атрибут (образец ниже показано, для доступа к файлам)

[PermissionSet(SecurityAction.Demand, Name = "FullTrust")] 
    public void load_From_Compressed_File() 
    { 
    } 

MSDN on System.Security.Permissions Вы хотели бы, чтобы проверить специфически registrypermissionattribute:

https://msdn.microsoft.com/en-us/library/system.security.permissions.registrypermissionattribute(v=vs.110).aspx

0

Чтобы запросить высоту из операционной системы Windows, вы должны включить манифест в вашу заявку:

<?xml version="1.0" encoding="utf-8"?> 
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
    <security> 
     <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> 

     <!-- Leave the desired execution level here -->  
     <requestedExecutionLevel level="asInvoker" uiAccess="false" /> 
     <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
     <requestedExecutionLevel level="highestAvailable" uiAccess="false"> 

     </requestedPrivileges> 
    </security> 
    </trustInfo> 
</assembly> 

Уровни выполнения определяются следующим образом (взяты из MSDN here):

  • asInvoker: приложение будет работать с теми же правами доступа, что и процесс, который начал его. Приложение можно повысить до более высокого уровня разрешений, выбрав «Запуск от имени администратора».

  • высокая доступность: Приложение будет работать с самым высоким уровнем разрешений, который он может. Если пользователь, который запускает приложение, является членом группы «Администраторы», этот параметр совпадает с requireAdministrator. Если самый высокий доступный уровень разрешений выше уровня процесса открытия, система запрашивает учетные данные.

  • requireAdministrator: Приложение будет работать с правами администратора. Пользователь, который запускает приложение, должен быть членом группы «Администраторы». Если процесс открытия не выполняется с правами администратора, система предложит ввести учетные данные.

Заключение

Для записи значения в реестре, вы, вероятно, следует включить <requestedExecutionLevel level="requireAdministrator" /> в манифесте. Но, возможно, вы даже не должны писать HKEY_LOCAL_MACHINE, но HKEY_CURRENT_USER (см. this answer).

 Смежные вопросы

  • Нет связанных вопросов^_^