.NET部署Office 2003可再发行的主互操作程序集(o2003pia.msi)

时间:2009-03-27 09:46:07

标签: c# .net deployment ms-office add-in

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

有一个很多人在那里询问这个,但我找不到任何真正成功的人。我找到了一些非常复杂的解决方案,你需要补充.cpp文件,其中可能提供或不提供源。我甚至试图编译其中一个,但在目标机器上遇到配置错误......: - (

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

还有第二个问题,不管前一个问题的结果如何:Office 2007的机器怎么样? 02203.msi抱怨没有安装Office 2003,所以我需要完成很多工作才能为“Office Shared Add-In”创建一个正常工作的安装程序...其他任何人都要通过它恶梦?

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

3 个答案:

答案 0 :(得分:2)

这可能太晚了,但这是我使用一小段C#代码安装公司办公室2003和2007插件的解决方案。也许它可以为你工作。

我使用o2003pia和o2007pia安装的产品代码:

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

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

然后,通过调用MSI API,您可以获得每个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”启动条件来检查上面提到的ProductCodes。如果满意,您可以运行安装PIA的自定义操作。

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

答案 1 :(得分:1)

不确定原因,但我查看了O2003PIA.MSI和O2007PIA.MSI,并获得了以下产品代码:

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

O2007PIAProductCode =“{00002105-5011-0000-0000-000000F01FEC}”

答案 2 :(得分:0)

没有答案?好吧, 并不重要 - 因为02003pia.msi和o2007pia.msi都可以安装多次而不会抱怨,检查它是否已经安装并不重要。