在我的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属性的任何资源。我怎么能这样做?
答案 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文件名 - 脆弱的黑客