我有一些需要在安装时删除的注册表资源,但如果目标上还有其他需要它们的组件则不会。 [理想情况下,我会通过将资源与共享组件相关联来实现此目的,但我在这里没有这个选项]。
我有一些共享代码来运行SQL命令(包括DELETE语句),这在其他任何地方都可以正常工作,但在目前的情况下,DELETE语句看起来很好,但是记录不会被删除。我写了一个查询,以便在DELETE命令运行后实际检查表的状态,看起来只有数据库记录的第一个元素实际上被删除,记录中的其余字段保持不变。 当我打印出表记录时,我得到这样的东西,第一个字段是空的
,2,SOFTWARE \ xxxxxxxInstall,版本,YYYYYYY ,,,
MSI(A8!5C)[16:49:19:628]:数据库字符串池已损坏。
我更改了大头钉,而不仅仅是执行DELETE命令,我在MSIMODIFY_DELETE的每条记录上都做了一个MsiViewModify,但我遇到了同样的问题。
最后我只需要编辑记录,以便它们引用我知道不存在的不同值,但我不喜欢这样,原因显而易见。
有人对此有任何建议吗? MSI 1.0中存在一个与字符串池相关的非常旧的错误,但它与需要提交的MSI数据库文件有关,这不适用于通过调用GetActiveDatabase()获取句柄的自定义操作的上下文。 / p>
答案 0 :(得分:1)
我很确定我记得在某处读取MSI SQL对临时表和行的支持是加法而不是减法的。你会注意到在SDK doco中只有INSERT INTO命令有TEMPORARY选项,DELETE FROM没有。
您确实需要更好地组织组件,以便您的注册表资源可以与具有依赖于注册表项的资源的组件的所有各种功能相关联。