У меня есть веб-приложение интрасети, где зашифрованная строка соединения хранится в реестре Windows (строка подключения разделяется некоторыми другими приложениями). Приложение размещено на сервере Windows 2012. В средах разработки/тестирования (не для производства) я хочу иметь возможность модифицировать этот ключ, чтобы я мог переключаться на разные базы данных.Запись в реестр Windows из приложения интрасети
Я, кажется, не быть в состоянии написать это, я получаю различные ошибки в зависимости от того, как я подойти к нему:
string sKeyValue = "SOFTWARE\\SomeProject\\SomeApp";
RegistryKey rk;
rk = Registry.LocalMachine.OpenSubKey(sKeyValue, true); // Requested registry access is not allowed.
Пробовал:
RegistryPermission p = new RegistryPermission(RegistryPermissionAccess.AllAccess, sKeyValue);
p.Assert();
также
RegistrySecurity rs = new RegistrySecurity();
RegistryKey key = Registry.LocalMachine;
rs = key.GetAccessControl();
string sUser = @"domain\userid";
rs.AddAccessRule(new RegistryAccessRule(sUser, RegistryRights.WriteKey, InheritanceFlags.None, PropagationFlags.None, AccessControlType.Allow));
key.SetAccessControl(rs); //Exception: "Attempted to perform an unauthorized operation."
Почему вы используете реестр? Web.config гораздо лучше подходит для такого рода вещей. – Colin
Как я уже упоминал, строка соединения распространена среди нескольких других приложений на одном сервере, поэтому вместо того, чтобы все приложения пытались синхронизироваться друг с другом в строке подключения, они решили ее зашифровать и поместить в реестр, чтобы все могли используйте ту же самую последнюю строку подключения (одно место для обновления) – NoBullMan