注册映射驱动器上已存在的COM服务器的正确方法

注册映射驱动器上已存在的COM服务器的正确方法,com,windows-installer,installshield,Com,Windows Installer,Installshield,我正在用installshield 2015开发一个基本的MSI安装程序,并试图了解是否有一种正确的方法,从系统a上运行的安装程序,注册安装在系统B上的进程外COM服务器(通过网络映射驱动器),而不实际包括或交付该COM服务器的可执行文件。通常我会使用这个命令来提取COM注册信息,但我认为这依赖于同一个组件,包括正在注册的文件,因为它使用的MSI表不包括一些仅在文件表中可用的信息。手动将结果转换为注册表项并从类表和其他COM表中删除行是否合适?我遵循了以下步骤: 添加组件并添加要注册到该组件的文

我正在用installshield 2015开发一个基本的MSI安装程序,并试图了解是否有一种正确的方法,从系统a上运行的安装程序,注册安装在系统B上的进程外COM服务器(通过网络映射驱动器),而不实际包括或交付该COM服务器的可执行文件。通常我会使用这个命令来提取COM注册信息,但我认为这依赖于同一个组件,包括正在注册的文件,因为它使用的MSI表不包括一些仅在文件表中可用的信息。手动将结果转换为注册表项并从类表和其他COM表中删除行是否合适?

我遵循了以下步骤:

  • 添加组件并添加要注册到该组件的文件
  • 将该文件设置为密钥文件
  • 提取密钥文件的COM数据
  • 清除密钥文件
  • 从组件中删除该文件
  • 确保将组件的路径设置为文件所在的位置
  • 在机器上临时注册部件
  • 导出该组件的ProgID和CLSID注册表项
  • 从导出文件中删除已存在于该组件的安装项目注册表设置中的注册表项和值
  • 将reg文件导入安装项目
  • 删除组件的“COM注册”值和AppID记录,只保留与组件关联的直接注册表更新
  • 将LocalServer32或InprocServer32值从硬编码路径和文件名更改为“
    ”[$componentname]文件名”
    ,包括引号

  • 除了LocalServer32键外,所有内容都需要看起来完全相同。它需要指向B路径。您不能使用映射的驱动器号,它们是每个用户的,它需要是UNC路径。服务器仍在本地执行,这不是DCOM。这不是一个很好的主意,因为网络连接不可用而无法启动服务器是很难诊断的。@HansPassant我想你错过了一个,如果我的变量。一是服务器是远程的。但还有一个问题:服务器已经存在,理想情况下不会由服务器A上运行的安装程序交付。必须配置DCOM才能使用服务器。您从未提到过这一点,在您尝试编写安装程序之前,请确保在您自己配置它时可以使用它。@HansPassant实际上我们已经使用DCOM多年了,现在正在将其作为更新的一部分删除。DCOM存在太多配置问题。实际上,我们已经完成了所有这些工作,但我认为只需要弄清楚如何正确注册文件已经存在的COM服务器。我们的COM服务器由配置为以特定用户身份运行的服务启动。但该服务正在另一台计算机上运行,其驱动器映射为该用户。