Можем ли мы создать и получить доступ к разделу реестра в HKEY_LOCAL_MACHINE без запуска приложения с правами администратора в C # - PullRequest
0 голосов
/ 02 ноября 2018

Есть ли возможность создать ключ в HKEY_LOCAL_MACHINE, не запуская приложение в режиме администратора. Если ключа нет, то новый ключ должен быть создан. Если ключ уже существует, его следует вернуть. Я попробовал приведенный ниже код, но он не работает. Есть идеи?

RegistryKey subRegKey = null;
string regVal = "";

try
{
   subRegKey = Registry.LocalMachine.CreateSubKey(registryBit, RegistryKeyPermissionCheck.ReadSubTree);
   regVal = subRegKey == null ? string.Empty : (string)subRegKey.GetValue(registryKey);
}
catch (Exception ex)
{
    Console.WriteLine("Error :");
    Console.WriteLine("  : " + ex.Message + "\n" + ex.StackTrace);
 }

Привет, Дэмиен, Я попробовал ниже согласно вашим предложениям, но не смог добиться успеха. Вы можете помочь?

Согласно вашему предложению я создал 4 родительских узла, запустив консольное приложение в режиме администратора следующими способами:

subRegKey = Registry.LocalMachine.CreateSubKey("SOFTWARE\DMK1\Default");
subRegKey = Registry.LocalMachine.CreateSubKey("SOFTWARE\DMK2\Default",RegistryKeyPermissionCheck.Default);
subRegKey = Registry.LocalMachine.CreateSubKey("SOFTWARE\DMK3\ReadSubTree",RegistryKeyPermissionCheck.ReadSubTree);
subRegKey = Registry.LocalMachine.CreateSubKey("SOFTWARE\DMK4\ReadWriteSubTree",RegistryKeyPermissionCheck.ReadWriteSubTree);

и я попытался создать дополнительные ключи на каждом из этих родительских узлов ниже 4 способами из консольного приложения (без администратора),

subRegKey = Registry.LocalMachine.CreateSubKey("SOFTWARE\DMK1\Default");
subRegKey = 

Registry.LocalMachine.CreateSubKey ( "SOFTWARE \ DMK1 \ Default", RegistryKeyPermissionCheck.Default); subRegKey = Registry.LocalMachine.CreateSubKey ("ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ DMK1 \ Default", RegistryKeyPermissionCheck.ReadSubTree); subRegKey = Registry.LocalMachine.CreateSubKey ("ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ DMK1 \ Default", RegistryKeyPermissionCheck.ReadWriteSubTree);

Но ни один из них не создал подраздел на родительском ключе. Если возможно, вы можете мне помочь, как создать родительский и дочерний узлы с использованием кода C #?

Ответы [ 3 ]

0 голосов
/ 02 ноября 2018

Как правило, ваше программное обеспечение не должно записываться в куст HKLM. Я не могу придумать причину для этого.

Может быть, вы собираетесь попробовать настроить программное обеспечение в вашем приложении. Вместо этого вы должны использовать программу установки (например, набор инструментов WiX).

Может быть, вы хотели бы поделиться информацией о состоянии. Для этого используйте% PROGRAMDATA%.

Тайная попытка программно изменить конфигурацию всей машины - кошмар администратора и может рассматриваться как поведение вредоносного ПО.

0 голосов
/ 05 ноября 2018

Это работало после того, как я изменил «Измененные настройки контроля учетных записей», чтобы никогда не уведомлять, и перезапустил машину, чтобы изменения вступили в силу. После этого я смог создать ключи в папке с пользовательским программным обеспечением.

0 голосов
/ 02 ноября 2018

Да, но.

Ключи имеют разрешения. Определенному ключу где-то в дереве, исходящем из HKLM, безусловно, можно задать свои разрешения, чтобы каждый мог создавать значения / подразделы внутри него.

Для конкретного приложения это должен быть (под) ключ, созданный специально для этой цели во время установки программного обеспечения. Конечно, установка должна выполняться администратором.

Специально администратор может создать такой ключ и сообщить вам об этом.

Но в целом дерево HKLM предназначено для настроек машины , и большинство из них должным образом под контролем администраторов машины. Большинство пользователей должны , а не иметь возможность применять изменения настроек для всей машины, за исключением специально определенных областей / ожидаемых изменений для конкретных приложений, которые описаны в моем приведенном выше описании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...