В моем консольном приложении я хочу создать значение DWORD и установить для него значение 2 в моем подразделе реестра на локальном компьютере. Обратите внимание, у меня есть права администратора на моей машине.
Вот мой код ниже, который успешно выполняется, но я не могу увидеть какое-либо значение, установленное в реестре.
string keyPathI = @"SOFTWARE\Microsoft\Terminal Server Client";
string keyPathII = @"SOFTWARE\WOW6432Node\Microsoft\Terminal Server Client";
RegistryKey keyOne = Registry.LocalMachine.OpenSubKey(keyPathI, true);
RegistryKey keyTwo = Registry.LocalMachine.OpenSubKey(keyPathII, true);
if (keyOne != null)
{
keyOne.SetValue("RemoteDesktop_SuppressWhenMinimized", 2, RegistryValueKind.DWord);
keyOne.Close();
}
if (keyTwo != null)
{
keyTwo.SetValue("RemoteDesktop_SuppressWhenMinimized", 2, RegistryValueKind.DWord);
keyTwo.Close();
}
Вот мой app.manifest
<assembly manifestVersion = "1.0" xmlns = "urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version = "1.0.0.0" name = "MyApplication.app"/>
<trustInfo xmlns = "urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns = "urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level = "requireAdministrator" uiAccess = "false" />
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
Что еще я должен сделать, чтобы записать значения в раздел реестра?
P.S. Хотя в сети есть много подобных статей, я ссылался на них все, но ни одна из них не смогла мне помочь.
Это работает для меня (VS 2015, 32-разрядное приложение в Windows 64) (тест на 64-разрядном улье) =>
using (RegistryKey rkLocalMachine = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64))
{
using (RegistryKey rk = rkLocalMachine.CreateSubKey(@"SOFTWARE\Microsoft\Terminal Server Client", true))
{
rk.SetValue("RemoteDesktop_SuppressWhenMinimized", 2, RegistryValueKind.DWord);
}
}
Спасибо, это сработало. Лучше всего то, что я удалил изменения app.manifest, но он все еще может записывать значения в реестр моей локальной машины.