Tag: 注册表

如何使用C#从Windows读取“公司名称”?

某些程序会读取您在安装Windows时输入的公司名称并将其显示在程序中。 这是怎么做到的? 他们只是从注册表中读取名称吗?

即使用户具有管理权限,App也无法写入注册表

我正在使用Visual Studio 2010,我正在编写一个程序,需要在HKLM\Software\myapp下设置(和读取)新的注册表值 该程序基于.NET 2.0,目前它在Windows 7 64位上运行。 这是我的ocde: RegistryKey softwareKey = Registry.LocalMachine.OpenSubKey(“Software”, true); RegistryKey MyKey = softwareKey.CreateSubKey(“MyApp”); RegistryKey = MyKey.CreateSubKey(“MyKey”); selfPlacingWindowKey.SetValue(“instaldateperson”, datestr + usrname); 我在运行Visual Studio 2010时遇到的问题是,它将运行应用程序但以我身份登录,我是本地管理员组的用户和成员..但是我无法创建密钥(尽管我是本地管理员组的一部分,谁有权这样做)。 我也不知道如何做它作为登录(但它也不是我想要的,因为那时我会把Adminuser和密码放在代码中,我已经是管理员了?所以为什么?) 如果根本不可能,是否有创建注册表项的选项? 不知何故将它们添加到项目中等等……我在这里有点困惑。

C#P / Invoke Win32函数RegQueryInfoKey

我试图移植以下C ++代码: BOOL SyskeyGetClassBytes(HKEY hKeyReg,LPSTR keyName,LPSTR valueName,LPBYTE classBytes) { HKEY hKey,hSubKey; DWORD dwDisposition=0,classSize; BYTE classStr[16]; LONG ret; BOOL isSuccess = FALSE; ret = RegCreateKeyEx(hKeyReg,keyName,0,NULL,REG_OPTION_NON_VOLATILE,KEY_QUERY_VALUE,NULL,&hKey,&dwDisposition); if(ret!=ERROR_SUCCESS) return FALSE; else if(dwDisposition!=REG_OPENED_EXISTING_KEY) { RegCloseKey(hKey); return FALSE; } else { if(RegOpenKeyEx(hKey,valueName,0,KEY_READ,&hSubKey)==ERROR_SUCCESS) { classSize = 8+1; ret = RegQueryInfoKey(hSubKey,(LPTSTR)classStr,&classSize,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); if((ret==ERROR_SUCCESS)&&(classSize==8)) { classBytes[0]= (HexDigitToByte(classStr[0]) << 4) | HexDigitToByte(classStr[1]); classBytes[1]= (HexDigitToByte(classStr[2]) << […]

如何从C#运行PowerShell脚本

我正在尝试使用C#运行PowerShell脚本,但我没有任何成功。 这是我的function: private void ExecutePowerShellCommand(string scriptfile) { RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create(); Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration); runspace.Open(); RunspaceInvoke scriptInvoker = new RunspaceInvoke(); scriptInvoker.Invoke(“Set-ExecutionPolicy Unrestricted”); Pipeline pipeline = runspace.CreatePipeline(); //Here’s how you add a new script with arguments Command myCommand = new Command(scriptfile); //CommandParameter testParam = new CommandParameter(“key”, “value”); //myCommand.Parameters.Add(testParam); pipeline.Commands.Add(myCommand); // Execute PowerShell script pipeline.Invoke(); } […]

如何在Vista中读取注册表分支HKEY_LOCAL_MACHINE?

我有应用程序设置存储在HKEY_LOCAL_MACHINE \ SOFTWARE \ MyCompany分支下。 不同用户的设置必须相同,这就是设置不在HKEY_CURRENT_USER下的原因。 注册表值仅在使用应用程序期间读取 。 现在,在Windows Vista中,由于UAC,您不能再使用以下代码来读取注册表值: RegistryKey myKey = Registry.LocalMachine.CreateSubKey (“SOFTWARE\\MyCompany\\MyAppName”); 如何在我的代码(C#)中读取LocalMachine分支的值?

快速读取所有注册表值的方法

我正在编写一个实用程序,需要在HKCR中创建所有注册表值的列表。 我使用递归函数执行此操作: var list = new Dictionary(); Read(Registry.ClassesRoot, list); static void Read(RegistryKey root, IDictionary values) { foreach (var child in root.GetSubKeyNames()) { using (var childKey = root.OpenSubKey(child)) { Read(childKey, values); } } foreach (var value in root.GetValueNames()) { values.Add(string.Format(“{0}\\{1}”, root, value), (root.GetValue(value) ?? “”).ToString()); } } 这很好用,但需要很长时间(我的电脑上有20秒)。 有没有更快的方法来做到这一点,还是这样做得好?

如何检索IP v6子网掩码长度

我正在编写一个必须在Windows 7计算机上获得网络适配器配置的应用程序,就像在Windows网络适配器配置面板中完成一样: 到目前为止,我可以从NetworkInterface.GetAllNetworkInterfaces()获得我需要的所有信息, 除了子网前缀长度 。 我知道可以通过OnLinkPrefixLength从C ++ PMIB_UNICASTIPADDRESS_TABLE检索它,但我试图留在.net中。 我还看了一下Win32_NetworkAdapterConfiguration WMI类,但它似乎只返回IP v4子网掩码。 我也知道一些信息(不是前缀长度,据我所知)在注册表中: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\TCPIP6\Parameters\Interfaces\{CLSID} 我还使用SysInternals ProcessMon尝试在保存网络适配器设置时获得任何有用的东西但却一无所获…… 那么,有没有什么干净的.NET方法来获得这个价值? (从注册表中获取它不会有问题) 编辑:网关 这与实际问题无关,但对于需要检索整个网络适配器IPv6配置的用户, IPInterfaceProperties.GatewayAdresses属性仅支持IPv4网关。 正如下面的答案评论中提到的,在.NET Framework 4.5之前获取整个信息的唯一方法是调用WMI。

如何以编程方式为管理员提供注册表项的所有权?

当我将一些机器升级到Windows 10时,我遇到了一个奇怪的问题,其中对RuntimeBroker的错误权限导致了问题。 我找到了一个在线解决方案 ,建议更改权限(首先在注册表中,然后在DCOM配置中),我正在尝试编写一个小型.NET应用程序来自动化该过程。 目前相关注册表项的所有者是NT SERVICE\TrustedInstaller ,我正在尝试将其更改为COMPUTER\Administrators 。 我有一个简单的WPF应用程序,其requestedExecutionLevel设置为“requireAdministrator”,但我仍遇到问题。 这是一段代码来说明问题: using System.Security.AccessControl; using System.Security.Principal; using Microsoft.Win32; namespace PermissionFixer { public class Fixer { public void Fix() { var subKey = Registry.ClassesRoot.OpenSubKey(@”AppID\{9CA88EE3-ACB7-47c8-AFC4-AB702511C276}”, true); if (subKey != null) { var admins = new NTAccount(“Administrators”); var ac = subKey.GetAccessControl(); ac.SetOwner(admins); ac.AddAccessRule(new RegistryAccessRule(admins, RegistryRights.FullControl, AccessControlType.Allow)); subKey.SetAccessControl(ac); } } } […]

在Windows 8 C中启动时运行应用程序#

这段代码: RegistryKey rKey = Registry.LocalMachine.OpenSubKey(“SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run”, true); rKey.DeleteValue(Application.ProductName, false); rKey.SetValue(Application.ProductName, Application.ExecutablePath, RegistryValueKind.String); 在Windows 8上不起作用。我不知道为什么,因为在Windows 7和Windows XP上这个解决方案有效。 你能帮助我吗?

写入注册表时Visual Studio部署项目错误

我有一个应用程序的设置,最近转换为框架4.0项目(不知道它是否相关)。 安装程序必须写入注册表(本地计算机),直到现在它一直工作得很好,但现在它无法写入干净机器上的注册表(运行Windows 7,64位)。 设置不会失败,不会显示任何类型的警告,但是它不会写入注册表(我甚至会在每个键上将AlwaysCreate属性设置为true,以防万一)这当然会导致应用程序在启动时终止。 可能是什么原因造成的? 我之前从未遇到过这样的错误。 编辑:我尝试以管理员身份运行安装程序,没有更改任何内容。