我不确定是否应该将这个问题提交给 Serverfault 还是 Stackoverflow。
我正在开发一个脚本(因此“按start->search
”不是一个选项),并尝试找到应用程序安装位置的方法。
我已经有了应用程序 SID。查看了
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
和
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\Folders
但它对这个应用程序没有帮助。
仔细检查整个注册表后,我发现了这条路径:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\0019F09C4327ED11A893800002C0A966
0019F09C4327ED11A893800002C0A966
如果我事先不知道,有人可以解释一下如何计算吗?
我注意到这里的键名是混合从后到前的应用程序SID:
key 0E0D0A87 6588 CF44 08ED 156E22CA84C6
sid 78A0D0E0-8856-44FC-80DE-51E622AC486C
所以我尝试搜索直接和反向的路径号码,只是 0019F09C 和反向,但没有运气。
在这个问题中,应用程序是 PHP,但解决方案应该适用于任何按照 MS 规则构建的应用程序(也就是说,不要只是将自己解压到某个地方,而是添加恰当的数据到注册表。我希望 PHP 能做到)。
更新:Evan Anderson 答案的截图
答案1
您正在查看由 Windows Installer 管理的应用程序。安装由全局唯一标识符 (GUID,您将其称为“SID”) 标识。该 GUID 用于存储有关安装的信息的注册表位置的名称。GUID 在一个地方与另一个地方的外观差异是因为 GUID 在某些位置以“打包”格式存储,而其他地方则以“未打包”格式存储。(以下是打包/解包 GUID 的一些背景和代码:http://www.dwarfsoft.com/blog/2010/06/22/msi-package-code-fun/)
假设包是基于每台机器安装的,则在包安装过程中指定的选项将位于 中HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\0019F09C4327ED11A893800002C0A966\InstallProperties
。
具体来说,该InstallLocation
值就是您要寻找的值。该值能包含为安装选择的目录,但不需要安装包来更新此值。
或者,您可以通过在以下命令中用包的打包 GUID 替换包来找到与安装包关联的所有文件:
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components" /s | find "PACKED_GUID_HERE"
这适用于任何安装包,但可能会给您一个非常长且详细的文件列表。