我正在安装包含一些COM服务器的Active X控件。我在Build中使用InstallShield的COM Extract选项来生成注册表信息。这导致注册表和类表中的条目很多。 (使用Wix提取的信息几乎相同)。类表生成InprocServer32值问题
看来,正确安装除了在InprocServer32项,看起来像这个名为“InprocServer32的”附加价值我的COM服务器:已
HKCR\CLSID\{MY-COM-GUID}\InprocServer32
(Default) = C:\Path-to-my\file.ocx
InprocServer32 = 8tYCAGak)9S9&~swl.$?MyFeatureName>*&N$B'fk?As1x2J653?'
唯一想我可以从额外的价值做出来是MyFeatureName,它是包含.ocx文件的MSI功能的内部名称。密钥没有在注册表中列出,所以它必须由Class表生成。
我遇到的问题只发生在Windows Server 2008中。似乎尝试使用COM服务器的应用程序无法从(默认)值中找到.ocx文件的路径,而是发现InprocServer32值。这会导致应用程序启动MSI,然后让MSI陷入似乎是无限循环的状态。
我想知道这是Windows Server 2008中的一个已知问题,或者是否有办法阻止msiexec生成的额外值。
SelfReg实际上是您安装时可以做的最糟糕的事情。它有各种令人讨厌的副作用,包括你可能最初不会想到的副作用。;) 克里斯指出的我的建议是避免COM广告。 – 2010-09-02 14:12:59
@Rob - 来自regfree COM的短小,有什么选项#3? – 2010-09-02 14:54:25
汉斯,把注册放在你的MSI注册表中。 WiX工具集有一些很好的元素可以帮助您在没有太多代码的情况下执行此操作(Class,TypeLib,ProgId等元素)。 – 2010-09-09 17:16:09