System.NullReferenceException 中第一次偶然出现的“GetproductCode.exe”类型的异常求解,谢谢
在 System.NullReferenceException 中第一次偶然出现的“GetproductCode.exe”类型的异常
请问是什么原因,我要怎么才能取到ProductCode,谢谢
public static string GetProductCode(string displayName)
{
string productCode = string.Empty;
string[] SubKeyNames;
//string[] valueNames;
string displayname;
//string info;
// 如果是32位操作系统,(或者系统是64位,程序也是64位)
string bit32 = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
// 如果操作系统是64位并且程序是32位的
string bit64 = @"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall";
RegistryKey localMachine = Registry.LocalMachine;
RegistryKey Uninstall = localMachine.OpenSubKey(bit32, true);
SubKeyNames = Uninstall.GetSubKeyNames();
foreach (string subkey in SubKeyNames)
{
RegistryKey productcode = Uninstall.OpenSubKey(subkey);
//valueNames = productcode.GetValueNames();
//foreach (string valueName in valueNames)
//{
// int i = valueName.IndexOf("DisplayName");
// if (i != -1)
// {
// RegistryKey myreg = Uninstall.OpenSubKey();
// info = myreg.GetValue(valueName).ToString();
// MessageBox.Show("结果的值是:" + info);
// }
//}
displayname = productcode.GetValue("DisplayName").ToString();
//if (displayname == displayName)
if (displayname.IndexOf( displayName)!=-1)
{
MessageBox.Show(displayname);
string uninstallString = productcode.GetValue("UninstallString").ToString();
string[] strs = uninstallString.Split(new char[2] { '{', '}' });
productCode = strs[1];
return productCode;
}
}
return productCode;
}相关推荐
VS2010架构工具:面向.NET遗留系统的可执行架构验证方案
架构验证是保障大型软件系统稳定性与可演进性的基础能力,其核心在于将设计契约转化为可自动执行、可精准反馈的工程实践。它源于分层建模思想,依托IL元数据解析与跨层依赖分析技术,实现对编译时、运行时、配置时和部署时四维依赖关系的统一验证。相比静态代码扫描或UML绘图工具,真正的架构验证强调可追溯性、可回滚性和CI/CD流程嵌入能力,尤其适用于存在大量技术债的.NET Framework单体系统。本文聚焦Visual Studio 2010架构工具这一被低估的工程化实践载体,深入解析其层关系图、依赖图与架构验证工具
C#为何成为2002年开发者的技术破局点
面向对象编程(OOP)作为软件工程核心范式,其落地长期受限于语法抽象与工程实践的鸿沟;GUI开发则因操作系统API复杂、工具链割裂而成为初学者难以逾越的断层。在硬件资源匮乏、教学体系滞后、IDE响应迟缓的早期开发环境中,C#凭借确定性资源管理(using语句)、封装完备的WinForms类库、以及Visual Studio .NET的智能感知与重构能力,将OOP从理论概念转化为可快速验证的工程实践。它不追求语言学上的极致优雅,而是以降低学习成本、缩短反馈周期、规避内存与异常陷阱为技术价值,支撑起桌面应用、课
VS Code 调试 Civil 3D 2027 插件:.NET 8.0 CoreCLR 调试实战指南
.NET 是现代 AutoCAD 二次开发的核心平台,而 CoreCLR 作为 .NET 5+ 的跨平台运行时,正全面替代传统的 Desktop CLR。Civil 3D 2027 首次强制采用 .NET 8.0 CoreCLR,引发插件加载、调试通信与程序集绑定等底层机制变革。其技术价值在于提升性能稳定性、支持跨平台工程化协作,并为 CI/CD 和单元测试提供基础。典型应用场景包括 AEC 行业的 BIM 插件开发、高校教学演示及设计院旧系统迁移。本文聚焦 VS Code 环境下实现稳定断点调试的关键路径
深入理解C# String:不可变性、内存布局与高性能实践
字符串是编程中最基础也最易被误解的数据类型,其本质远不止字符序列那么简单。在.NET中,System.String作为兼具引用类型身份与值语义行为的特殊对象,其不可变性设计直接支撑线程安全、哈希缓存和GC优化;而紧凑的内存布局(内联字符数据)与JIT深度优化(如Length零开销访问)共同构成高性能基石。理解字符串驻留机制、UTF-16代理对陷阱、Span<char>零分配切片等关键特性,能显著规避内存泄漏、GC风暴与比较逻辑错误。本文聚焦C#开发者高频踩坑场景,覆盖拼接策略选择、安全比较规范、空值判断优化
Unity资源管理演进史:AssetBundle→Addressable→YooAsset
Unity资源管理是支撑游戏热更、包体控制与跨平台交付的核心技术体系。其本质是围绕资源动态加载、依赖解析、缓存策略与版本控制的一系列工程实践。从早期AssetBundle的手动依赖管理和序列化机制,到Addressable Assets的声明式配置与Catalog增量更新能力,再到YooAsset面向VR/热更场景的可编程加载管道,每一次演进都回应着移动包体膨胀、IL2CPP AOT限制、90Hz帧率保障等真实工程挑战。理解三者在原理层(二进制序列化 vs JSON元数据 vs 状态机Pipeline)、技


