我们正在为 Photoshop 编写一个简单的 .NET C# COM 应用程序,它旨在在从 CS2 到 CS5 的所有版本以及介于两者之间的所有版本上运行。同样的应用程序也以 JavaScript 形式存在,它适用于所有上述版本,因为我们避免实现特定于版本的功能。
我们遇到的问题与 COM 接口有关。例如,如果我们的应用程序是使用 Photoshop CSx 中的 Interop.Photoshop DLL 编译的,则它不会在 Photoshop CSy 上运行。这似乎是因为注册表 CLSID 特定于每个版本的 Photoshop,导致我们的应用程序找不到正确的 COM 接口 DLL,如果在安装了与我们编译的不同版本的 Photoshop 的系统上运行(假设两个应用程序是 32 位的)。
如果这确实是问题所在,我们想知道是否可以使用 CSy CLSID 重新注册 Photoshop 版本 CSx 的 COM 接口,忽略版本之间功能可能不同的事实。
更具体的信息如下:
我们的主要 Photoshop.Application CLSID 位于注册表中:HKEY_CLASSES_ROOT\Photoshop.Application\CLSID 此 CLSID 必须与构建我们的应用程序的 CLSID 相匹配。例如,此 ID 在 CS5 和 CS5.1 之间有所不同。
我们今天唯一的解决方案是为特定版本的 Photoshop 构建我们的应用程序的特定版本,而这只有在我们安装了该特定应用程序版本的情况下才有可能。
我们得到的错误代码是 0x80040154,“检索具有 CLSID {116EE066-135E-4F63-8D0E-78F62705FBFC} 的组件的 COM 类工厂失败”。此应用程序是使用 CS5.1 构建的,但在 CS5.04 上运行导致无法找到 COM 接口。此 CLSID 特定于 CS5.1。总之,我们需要重新注册 COM 接口以匹配 CS5.04 的 CLSID,以便能够在该特定版本上运行我们的应用程序。这是可能的还是有其他方法?
非常感谢我们可以就此事获得的任何帮助或提示。