我不确定是否应该把这个问题在Serverfault或Stackoverflow。
我正在开发一个脚本(所以'按start->search '不是一个选项),并试图find一种方法来find一个应用程序的安装位置 。
我已经有应用程序SID。 看着
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths和
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\Folders但它没有帮助这个程序。
爬过整个registry,我发现这条路:
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
所以我试图search直线和颠倒的path号码,只是0019F09C和扭转,但没有运气。
在这个问题中,应用程序是PHP,但解决scheme应该适用于任何根据MS规则构build的应用程序(也就是说,不要只是将它自己解压到某处,而是向registry中添加适当的数据,我希望PHP能做到这一点)。
upd:截图到Evan Anderson的回答 
您正在查看由Windows安装程序pipe理的应用程序。 安装由全局唯一标识符(GUID,您称为“SID”)来标识。 该GUID用于存储有关安装信息的registry位置的名称中。 GUID在一个地方与另一个地方的区别是因为GUID以“packed”格式存储在某些位置,而其他地方以“unpacked”存储。 (下面是一些背景和代码来打包/解压缩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值是你正在寻找的。 此值可以包含为安装select的目录,但不需要安装软件包来更新此值。
或者,您可以通过在以下命令中用打包的GUIDreplace软件包来find与安装软件包关联的所有文件:
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components" /s | find "PACKED_GUID_HERE"
这将适用于任何安装包,但可能会给你一个很长的,详细的文件列表。