我已将基于WiX的安装程序混淆在多台服务器上,以便在卸载过程中不再删除文件或组件(或甚至其他功能)。 MSI日志显示所有不会卸载的组件上的PreviouslyPinned = 1。删除与WiX一起安装的GUID =“”组件
我不喜欢使用SharedDll计数甚至不同安装程序之间的共享组件。
我想我已经追踪到我的WiX代码的特定版本。我做了几件愚蠢的事情。我(无意)创建的非托管组件用空的Guid
<Component Id="file.ext" Guid="">
<File .../>
<Component>
,我也改变了其他组件的文件位置和Id(但不包括它的GUID)。先前版本中的所有组件显示BeforelyPinned = 1,并且不会卸载,并且在此版本之后添加的新组件正确安装/卸载。
如何让我的安装程序恢复正常并删除以前固定的组件?
我听到你说的是,因为一个空白的GUID甚至没有注册一个组件,它应该对其他组件没有影响。是对的吗? – 2009-10-14 18:03:43
是的,一般来说,空白的GUID应该对其他组件没有影响,因为MSI在安装文件后忽略它。但是,很少有一个事实没有修改:由空白GUID安装的文件将不会被卸载。如果这是一个版本化文件,并且在添加一个guid之前不更改安装位置,理论上可能现有文件可能会阻止安装新文件版本(如果现有文件是较高版本)。如果您使用次要升级,还有一些其他不太可能的情况,但如果您不使用它,我不会进入它。 – 2009-10-14 19:13:27
感谢您的详细解答!最后,让其他所有东西能够正确解除(从MSI日志中删除PreviouslyPinned = 1引用),我必须进入该PC上的注册表,并从 HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Installer \ UserData \ \ Components基于我在这里发现的提示http://blogs.msdn.com/icumove/archive/2008/06/17/windows-installer-error-2908-with-sub-errors- 1402-and-1450.aspx –
2009-10-16 08:21:10