我尝试在 Visual Studio 中创建一项服务,该服务在服务启动时检查“SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall”的值并将其存储为哈希集。每 20 分钟,它会拉取该目录的另一个哈希集,并比较这两个集合,以根据注册表中已卸载值的添加来有效地查看是否安装了程序。我使用了一个单独的项目,也使用了 Visual Studio,它是一个控制台应用程序,以便在创建服务应用程序之前轻松测试逻辑。
我遇到的问题是,从服务到控制台应用程序的代码在逻辑上是相同的,但是只有控制台应用程序按预期运行。当我安装程序时,我的测试是 TeamViewer,它会在注册表中看到新条目并进行设置,然后向控制台发送电子邮件/写入发现更改。我认为主要区别在于该服务被迫使用 .net 框架构建,而控制台应用程序只是 .net。
主要服务目录是WatchTower。 控制台测试目录是Consoletest。 两个目录的相关类文件都是 InstalledApps.cs。
代码可以在这里找到:https://github.com/TartCart/WatchTower.git
我已将服务的输出打印到日志文件中,并看到它能够访问注册表并填充哈希集,但服务似乎在访问注册表后无法从注册表获取更新集第一次......而在控制台应用程序中它会获取更新的设置。我已经检查了权限并最大程度地利用 chatGPT 进行测试/调试,但据我有限的经验所知,幕后的某些东西并没有提供。
我对软件开发缺乏经验,因为我确信我的代码会揭示 - 任何反馈将不胜感激。谢谢
确保您同时检查 32 位和 64 位注册表位置。
SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall
更多信息这里
此外,您可能应该打开并关闭内部的钥匙
Timer_Elapsed
,而不是打开它并保持静止。