我想在CustomerInfo表单中显示序列号(它是从第一次安装中捕获并安装在注册表中)在第二次、第三次等安装时,升级只是一个小版本更改(或补丁)。这是在VS部署项目和/或WIX中可以通过自定义操作(我有一个C++方法从注册表中获取SerialNumber )、MSI配置(通过例如Orca编辑表)或其他方式完成的操作吗?
问候
特拉维斯
发布于 2014-04-22 00:04:40
就我个人而言,我总是做PerMachine安装,不需要显示客户信息对话框。如果应用程序想要获得许可,最好在应用程序第一次运行时就这样做。
如果你真的想在MSI上做这件事,你还有很多工作要做。MSI不会在事务间持久化属性,所以您必须自己执行。请参见:
WiX工具集的“记住属性”模式
我有一个名为IsWiX的开源项目。它包括一个创建安装程序项目框架的Visual项目模板。该框架的一部分展示了如何插入自定义对话框,然后编写一个组件来处理该对话框上控件的remember属性。您可以找到源这里。
发布于 2014-04-22 16:30:54
我将跳过克里斯介绍的WiX部分。
要在VS项目中这样做,您应该使用Customer对话框,从额外的罐装对话框列表中添加,并使用SerialNumberTemplate内容。它设置了ProductID属性,这是您应该做序列号的方式。因此,您可以在中创建一个具有值ProductID的注册表项,以便将其保存在个人位置。获取已安装产品的“官方”方法是MsiGetProductInfo()或等效传递ProductCode并请求"ProductID“,如本文所述:
http://msdn.microsoft.com/en-us/library/aa370130(v=vs.85).aspx
总之,如果包使用正式的PIDKEY /ProductID机制(比如VS和WiX),您不需要自己保存它,您可以通过MsiGetProductInfo()或等效的via /托管代码来获得它。
如果您想在升级时在标准客户信息表单中的VS设置中显示以前的SerialNumber,我不相信您能够做到这一点。没有进入这些表格的机制。如果您私自保存SerialNumber,您可以尝试对保存的序列号进行注册表搜索,并将其存储在PIDKEY属性中,以查看它是否出现在那里,因为PIDKEY属性是该值的源。
https://stackoverflow.com/questions/23208009
复制相似问题