Установка Ключа реестра пишет полномочия с помощью.NET

Я пытаюсь предоставить Доступ для записи к настройкам реестра своего приложения всем или всем пользователям машины во время процесса установки.

Мое приложение не имеет соответствующих полномочий непосредственно после установки, не требуя, чтобы администратор предоставил им даже при том, что ключи и значения существуют, они не могут быть обновлены? У меня есть отрывок ниже, но установщик перестал работать из-за Несанкционированного доступа / доступ запрещен. Я думаю, что я на правильном пути...

Как я могу решить вопрос полномочий, не требуя ручного внимания? Существует ли лучший подход? Я пытаюсь заменить дополнительный установщик установкой Visual Studio путем добавления этой функциональности.

    protected void GrantAllAccessPermission(String key)
    {
        try
        {
            SecurityIdentifier sid = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
            NTAccount account = sid.Translate(typeof(NTAccount)) as NTAccount;

            // Get ACL from Windows, allow writing to the registry key
            using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(key, true))
            {

                RegistrySecurity rs = new RegistrySecurity();

                // Creating registry access rule for 'Everyone' NT account
                RegistryAccessRule rar = new RegistryAccessRule(
                    account.ToString(),
                    RegistryRights.FullControl,
                    InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                    PropagationFlags.None,
                    AccessControlType.Allow);

                rs.AddAccessRule(rar);
                rk.SetAccessControl(rs);
            }

        }
        catch (System.Security.SecurityException ex)
        {
            throw new InstallException(
                String.Format("An exception in GrantAllAccessPermission, security exception! {0}", key),  
                ex);
        }
        catch (UnauthorizedAccessException ex)
        {
            throw new InstallException(
                String.Format("An exception in GrantAllAccessPermission, access denied! {0}", key),  
                ex);
        }

    }
15
задан Jared Knipp 21 January 2015 в 23:26
поделиться

2 ответа

В итоге я выбрал другой и лучший подход, переключившись на Wix 3.0. Используя установщик Wix, я могу легче настраивать и расширять свою установку.

Add Wix Util Extension namespace:

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:util='http://schemas.microsoft.com/wix/UtilExtension'>

Wix Sample for registry permissions:

<!-- Registry entries -->
<DirectoryRef Id="TARGETDIR">
  <Component Id="RegistryEntries" Guid="{YOUR-GUID}">

    <!-- Create registry keys and grant user rights -->
    <!-- Add Registry Keys and default values as necessary -->
    <RegistryKey Root="HKLM" Key="$(var.RegKey)" Action="create">
        <util:PermissionEx User="[WIX_ACCOUNT_USERS]"  GenericAll="yes"/>
    </RegistryKey> 
    ...
1
ответ дан 1 December 2019 в 04:34
поделиться

Лучший подход - поставить ваши настройки приложения где-то, что у ваших пользователей будет разрешение на обновление.

1
ответ дан 1 December 2019 в 04:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: