在用 Visual Studio 2005 建立生成安装文件的工程时,因为应用程序的需要,在安装的时候要求 Windows Installer 把用户选择的安装路径写到注册表里。这个时候,有什么解决办法呢?

可以在生成安装文件的工程里,手动插入一个系统预留的属性值(即需要转义的字符串),在 Windows Installer 安装程序的时候,会自动把这些属性值替换掉。可以用 []{} 来把该属性值括起来。

例如,右键点击”安装工程名称 ==> 视图 ==> 编辑器 ==> 注册表”,这时,可以添加如下注册表项:

HKEY_CURRENT_USER|HKEY_LOCAL_MACHINE\Software\[Manufacturer]\

这样,在 Windows Installer 安装程序的时候, [Manufacturer] 就会自动转义为实际的值。当然,如果没有对应的系统预留属性值,则转义为空值( blank )。

系统预留的属性值有很多个,例如对于安装目录来说,是 [TARGETDIR] ,即 [TARGETDIR] 会根据安装时用户选择的安装路径赋值。当你在注册表里,需要填写程序安装路径的时候,就可以用这个属性值来占位。Windows Installer 在安装的时候,自然会把它替换为实际路径。安装后,会显示为类似于下面的路径:

C:\Program Files\TestApp\TestAppFirstPart\

如果你需要在注册表里指定相应的可执行文件或动态链接库,比如说,你要在注册表里插入下面的路径:

C:\Program Files\TestApp\TestAppFirstPart\test.dll

这时,你就应该在工程里把属性值设为:

[TARGETDIR]test.dll

注意 [TARGETDIR] 生成的目录会有最后一个 ** 号。

更多 Windows Installer 使用技巧可以看 Windows Installer (MSI) Tips and Notes