为crystal report创建SessionMgr实例会引发错误

时间:2016-10-31 06:26:47

标签: c# crystal-reports

我使用以下代码连接到SAP cms服务器以从中获取报告。

using CrystalDecisions.Enterprise;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string username = "user";
            string password = "pwd";
            string server = "srv_name";
            string auth_type = "authType";
            // logon
            SessionMgr session_mgr = new SessionMgr();
            EnterpriseSession boEnterpriseSession = session_mgr.Logon(username , password, server, auth_type);

            //boInfoStore = (IInfoStore)boEnterpriseSession.getService("InfoStore");

            //boInfoStore = (IInfoStore)boEnterpriseSession.GetService("InfoStore");

            // get the serialized session
            //string session_str = session.SerializedSession;
            // pass the session to our custom bypass page on the CRS

        }
    }

但是在执行以下代码行时我遇到了下面提到的错误:SessionMgr session_mgr = new SessionMgr();

  

未处理的类型异常   发生'System.Runtime.InteropServices.COMException'   CrystalDecisions.Enterprise.Framework.dll

     

其他信息:检索组件的COM类工厂   CLSID {6670DE06-3F39-4C5D-9238-71FF984D2654}由于失败而失败   以下错误:80040154类未注册(异常来自   HRESULT:0x80040154(REGDB_E_CLASSNOTREG))。

2 个答案:

答案 0 :(得分:0)

根据nobugz的回答这里 https://social.msdn.microsoft.com/Forums/vstudio/en-US/88a6ea68-f476-4231-822f-27fabe59f458/error-80040154-retreiving-com-class-factory?forum=vbgeneral
建议您检查HKCR \ CLSID中的GUID键。如果它不在那里,它可能在另一个文件夹(c:\ windows \ system32 ...)。 另一种方法是使用Regmon进行调试 “它向您展示了您的应用程序如何使用注册表。在您的应用程序上运行它并在客户上运行它并比较两者。”

答案 1 :(得分:0)

尝试:

ISessionMgr sessionMgr = CrystalEnterprise.GetSessionMgr();

IEnterpriseSession enterpriseSession = sessionMgr.Logon("userName", "password", "cmsName", "secEnterprise");

string token = enterpriseSession.LogonTokenMgr.DefaultToken;