C++ Excel Automation Workbooks.Open()函数在通过Windows服务调用应用程序时引发灾难性错误

C++ Excel Automation Workbooks.Open()函数在通过Windows服务调用应用程序时引发灾难性错误,c++,excel,windows-services,C++,Excel,Windows Services,我的一个应用程序是关于在创建一些图形文件时自动化MS Excel。我正在使用基本的tli方法来实现这一点当我开始在windows7上对其进行一些修改时,xp机器上运行的代码出现了问题。发生的情况如下所述: 导致问题的代码行如下所示: if(!app.CreateDispatch("Excel.Application")) { fprintf(log, "%s\n", "Microsoft excel, could not be launched. Please make sure it

我的一个应用程序是关于在创建一些图形文件时自动化MS Excel。我正在使用基本的tli方法来实现这一点当我开始在windows7上对其进行一些修改时,xp机器上运行的代码出现了问题。发生的情况如下所述:

导致问题的代码行如下所示:

if(!app.CreateDispatch("Excel.Application"))
{
    fprintf(log, "%s\n", "Microsoft excel, could not be launched. Please make sure it is installed on the target machine.");
    return;
}
else
{
    //Make the application visible and give the user control of
    //Microsoft Excel.
    ////    app.put_Visible(TRUE);
    ////    app.put_UserControl(TRUE);
    CString Title;
    CString  s = app.get_Version();
    //Excel 2003 takes 13 arguments hence we need to prepare options variant 
    COleVariant
        covTrue((short)TRUE),
        covFalse((short)FALSE),
        covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

    CWorkbooks b=app.get_Workbooks();

    CWorkbook bkThis, bkMaster;

    try
    {
        bkThis=b.Open(strFileName, 
            covOptional,  // UpdateLinks, 
            covOptional,  // ReadOnly, 
            covOptional,  // Format, 
            covOptional,  // Password, 
            covOptional,  // WriteResPassword, 
            covTrue,  // IgnoreReadOnlyRecommended, 
            covOptional,  // Origin, 
            covOptional,  // Delimiter, 
            covOptional,  // Editable, 
            covOptional,  // Notify, 
            covOptional,  // Converter, 
            covOptional,  // AddToMru, 
            covOptional,  // Local, 
            covOptional  // CorruptLoad, 
            );

    }
    catch(CException *e)
    {
        fprintf(log, "The input file being tried: %s\n", strFileName);

        fprintf(log, "%s(%d): OLE Execption caught: SCODE = %x",__FILE__, __LINE__, COleException::Process(e));
        e->Delete();
        app.Quit();
        app.DetachDispatch();
        app.ReleaseDispatch();
        return;
    }
  • 当我通过Visual studio运行代码时,它运行正常,但当我使用Windows服务启动它时,Workbooks.Open()函数失败,出现8000FFFF Catastrpic错误
  • 安全特权应该不会有问题,因为在调用此代码之前,我的ADO数据库连接正在正常运行
请建议是否有人对此有任何想法

问候
YK

当我使用Windows服务时,Microsoft当前不推荐也不支持从任何无人参与、非交互式客户端应用程序或组件(包括ASP、ASP.NET、DCOM和NT服务)自动化Microsoft Office应用程序,因为在此环境中运行Office时,Office可能会表现出不稳定的行为和/或死锁。此问题可能与Windows Vista中出于安全原因所做的更改有关。感谢各位指点人员,我对此表示感谢。看来我现在得做些变通了。大家好,有没有在vc++中为服务器类应用程序使用msxml或openXML实现xls自动化的示例代码?我试过了,但在谷歌上找不到。他们在msdn上描述的openXML只是关于c#和vb的提示。大家好,我从2012年3月15日起就一直在努力解决这个问题,但实际上我已经找到了解决方案。您需要在windows 7计算机中有一个可用的文件夹,如“C:\windows\SysWOW64\config\systemprofile\Desktop”,具体取决于您使用的计算机。如果是32位,则相应地修改。这将解决问题。多亏了互联网上一个名为“CSharper66”的个人资料。