C#/.net 程序会比较注册表目录随时间的差异。适用于控制台测试应用程序,但不适用于服务

问题描述 投票:0回答:1

我尝试在 Visual Studio 中创建一项服务,该服务在服务启动时检查“SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall”的值并将其存储为哈希集。每 20 分钟,它会拉取该目录的另一个哈希集,并比较这两个集合,以根据注册表中已卸载值的添加来有效地查看是否安装了程序。我使用了一个单独的项目,也使用了 Visual Studio,它是一个控制台应用程序,以便在创建服务应用程序之前轻松测试逻辑。

我遇到的问题是,从服务到控制台应用程序的代码在逻辑上是相同的,但是只有控制台应用程序按预期运行。当我安装程序时,我的测试是 TeamViewer,它会在注册表中看到新条目并进行设置,然后向控制台发送电子邮件/写入发现更改。我认为主要区别在于该服务被迫使用 .net 框架构建,而控制台应用程序只是 .net。

主要服务目录是WatchTower。 控制台测试目录是Consoletest。 两个目录的相关类文件都是 InstalledApps.cs。

代码可以在这里找到:https://github.com/TartCart/WatchTower.git


我已将服务的输出打印到日志文件中,并看到它能够访问注册表并填充哈希集,但服务似乎在访问注册表后无法从注册表获取更新集第一次......而在控制台应用程序中它会获取更新的设置。我已经检查了权限并最大程度地利用 chatGPT 进行测试/调试,但据我有限的经验所知,幕后的某些东西并没有提供。

我对软件开发缺乏经验,因为我确信我的代码会揭示 - 任何反馈将不胜感激。谢谢

c# .net windows windows-services registry
1个回答
0
投票

确保您同时检查 32 位和 64 位注册表位置。

SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall

更多信息这里

此外,您可能应该打开并关闭内部的钥匙

Timer_Elapsed
,而不是打开它并保持静止。

© www.soinside.com 2019 - 2024. All rights reserved.