WiX:我如何在外部设置房产?

时间:2010-03-02 17:22:23

标签: installer wix windows-installer properties

在我的WiX安装程序中,我有一个UserID的属性,该属性被写入注册表项:

<Property Id='UserID' Value='123' />

<Directory Id='TARGETDIR' Name='SourceDir'>
    <Component Id='UserIDComponent' Guid='*'>
        <RegistryValue Root='HKCU' Key='Software\[Manufacturer]\[ProductName]' 
                       Type='integer' Value='[UserID]' Name='UserID' />
    </Component>

我想将该属性的值设置为即时下载我的安装程序的用户的用户ID。因此,当他们去下载时,我只会创建一个每个人都可以获得的基本MSI的副本,将UserID的值设置为下载文件的人的值,这就是他们下载的内容。这将是每个人都获得的相同安装包,但具有为其定制的属性。

我似乎无法找到有关如何从外部源设置WiX MSI属性的任何资源。我怎么能这样做?

2 个答案:

答案 0 :(得分:9)

据我记忆,你确实可以从“外部”设置属性 - 属性名称必须在所有大写中被识别为公共属性(不要问我为什么......)然后你可以像这样设置:

msiexec /i C:\Example.msi PROPERTY=VALUE

e.g。在你的情况下

msiexec /i C:\Example.msi USERID=somevalue

有关使用MSIEXEC

的命令行选项,请参阅MSDN docs

答案 1 :(得分:1)

您的选项似乎是: -

(i)msiexec上的命令行参数按照另一个答案 - 脆弱,如果他们下载并运行它不是真正的选项

(ii)尝试破解MSI文件以插入ID - 黑客

(iii)在修改WIX文件的副本以包含其ID后,启动MSBUILD以在服务器上按需创建新的MSI文件

(iv)预先生成许多带有随机ID(可能是GUID)的MSI文件,然后在数据库中下载时将这些ID与用户ID相关联。现在提供一个查找服务,以使用真实用户ID映射MSI文件中的随机ID,以便程序在运行时可以找到用户ID(或者有自定义操作执行此操作)。

(v)创建自定义操作并使用MsiGetProperty获取安装程序的文件名 - 只需将userID附加到MSI文件名 - 脆弱的黑客