3

有没有人真正成功地为 o2003.msi 创建了先决条件?

很多人问这个问题,但我找不到真正成功的人。我发现了一些极其复杂的解决方案,您需要完成可能提供或不提供源代码的 .cpp 文件。我什至尝试编译其中之一,但在目标机器上出现配置错误...... :-(

如果我不安装 o2003.msi,我的 Office“共享加载项”将抛出异常,因为找不到 office.dll。所以我非常希望将它包含在我的安装程序中。

第二个问题,不管前一个问题的结果如何:一台装有 Office 2007 的机器怎么样?02203.msi 抱怨没有安装 Office 2003,所以我似乎需要完成很多事情才能为“Office 共享加载项”创建一个工作安装程序......其他任何人都经历过同样的事情恶梦?

更新:这似乎是 Office.Core /“office.dll”的 PIA,这是真正可以在 traget 机器上获得的东西。没有一个“复杂”的解决方案(我知道如果我付出一些努力就可以开始工作)谈论如何检测这个特定的文件,只有 Word 和 Excel 的 PIA 等等。无论如何,这些似乎已经到位。如果安装不正确,office.dll 是检查和安装 o2003pia.msi 的重要文件!

4

3 回答 3

2

这可能为时已晚,但这是我为使用少量 C# 代码安装我们公司的 office 2003 和 2007 插件所做的一个解决方案。也许它对你有用。

我将产品代码用于 o2003pia 和 o2007pia 安装,它们是:

2003:{91490409-6000-11D3-8CFE-0150048383C9}

2007: {50120000-1105-0000-0000-0000000FF1CE}

然后,通过调用 MSI API,您可以获得每个的安装状态。这是查找 2003 的示例:

[DllImport("msi.dll")]
    private static extern MsiInstallState MsiQueryProductState
        (string productGuid);
    [DllImport("msi.dll")]
    private static extern uint MsiGetProductInfo
        (string productGuid, string propertyName, StringBuilder valueBuffer, ref Int32 bufferSize);

    bool IsPia2003Installed()
    {
        MsiInstallState state = MsiQueryProductState("{91490409-6000-11D3-8CFE-0150048383C9}");

        return (state == MsiInstallState.msiInstallStateDefault);
    }

如果您尝试完全在安装项目中完成所有这些工作(我假设您使用的是 Visual Studio?),那么您可以添加一个“Windows Installer Search”启动条件来检查上述产品代码。如果满意,您可以运行安装 PIA 的自定义操作。

有关此解决方案的更多信息,我建议从此处开始

于 2009-04-02T16:28:55.637 回答
1

不知道为什么,但我查看了 O2003PIA.MSI 和 O2007PIA.MSI,得到了以下产品代码:

O2003PIAProductCode = "{90409419-0006-3D11-C8EF-10054038389C}"

O2007PIAProductCode = "{00002105-5011-0000-0000-000000F01FEC}"

于 2009-06-02T00:57:48.763 回答
0

没有答案?好吧,这并不重要——因为 02003pia.msi 和 o2007pia.msi 都可以安装多次而不会出现任何问题,因此检查它是否已经安装并不重要。

于 2009-03-31T15:10:26.767 回答