我正在开发一个创建 .msi 文件的安装程序。有一个与之关联的 CustomAction 程序,它是用 C# 编写的。在此 CustomAction 程序中创建了三个 COM 对象引用,这些引用是其正常工作所必需的。它们如下。
- 活动 DS IIS 命名空间提供 (C:\Windows\System32\inetsrv\adsiis.dll)
- Windows 脚本宿主对象模型 (C:\Windows\System32\wshom.ocx)
- NetFwTypeLib (C:\Windows\System32\FirewallAPI.dll)
作为补充信息,以下是我在程序中使用这些 DLL 的任务。
- 为特定文件类型设置 MIME 设置。
- 创建文件夹的桌面快捷方式。
- 将程序注册为防火墙例外
.
现在,这是我的问题。当我在 Visual Studio 中重建 C# 程序并执行 CustomAction 程序时,它工作正常,我可以像魅力一样完成上述三个任务。但是,当我实际构建 .msi 并尝试执行它并在我的系统上安装程序时,它会给出错误。我使用的是日文操作系统,所以它会给出日文错误,所以我会尽量将错误消息翻译成英文。错误是这样的:
*
无法加载文件或程序集“Interop.IISOle,版本 = 1.0.0.0,文化 = 中性,PublicKeyToken = null”或其依赖项之一。找不到指定的文件。
*
给出此特定错误消息是因为它与第一个 dll (adsiis.dll) 相关,因为它是包含 IISOle 命名空间的那个。同样,它给出了与我从程序中引用的所有三个 COM 对象相关的错误消息。现在我可以从中理解的是,不知何故,当这段代码在 .msi 文件中时,它找不到合适的 COM 对象。我真的很困惑为什么会发生这种情况,因为当我尝试安装程序时,即使在我用来编写 CustomAction 代码的同一台机器上,安装程序也会出现同样的错误。有趣的是,它可以通过 Visual Studio 界面完美执行。请帮我解决这个问题。提前致谢!
请注意,我正在使用 Windows Vista Business,但我需要我的安装程序才能安装在从 Windows Server 2003 到 Windows 7 的各种 Windows 操作系统上。