2

我支持连接到 2 个 QuickBooks 文件的旧版 WinForms C# 应用程序。它多年来一直运行良好,无论是 QuickBooks 2008 还是 QuickBooks 2011。

几天前,客户端升级到 QuickBooks 2014。从那以后,该应用程序没有成功连接到 QuickBooks 文件。当我手动运行应用程序时,它会抛出一个 .NET 错误,提示 System.Runtime.InteropServices.COMException (0x80040408):无法启动 Quickbooks。

我决定测试以确保我使用的 SDK 8.0 版实际上可以连接到 QB 2014。因此,我运行了 SDKTestPlus3 应用程序。当我尝试连接到公司文件时,它告诉我应用程序无权连接到该公司文件。因此,我在 QB 中打开公司文件并进入单用户模式,然后再次尝试 - 期望得到弹出窗口,要求我授予该应用程序连接权限。相反,当我尝试连接在单用户模式下在 QB 中打开的文件时,SDKTestPlus3 给出了一个错误,提示“A QuickBooks 公司数据文件已经打开,它与请求的不同,或者打开了多个公司文件。”

谁能在这里指出我正确的方向。QBFC8 是否与 QB 2014 兼容,如果是,我需要做些什么才能让这个与 QB 2011 合作了这么长时间的应用程序继续与 QB 2014 合作?

蒂亚!

附加信息

我现在注意到连接到 QhickBooks 的错误似乎是间歇性的。WinForms 应用程序在每天凌晨 1:00 由 Windows 计划任务运行。自从周一升级到 2014 后,周二、周三和周四早上都失败了。在查看今天的日志文件 - 今天早上它成功连接并处理了 QB 中的记录。现在,当我尝试手动运行它时,而不是 (0x80040408): 无法启动 Quickbooks COM 错误我得到了 COM 错误 (0x8004041C): 尝试访问 QuickBooks 公司数据文件时发生内部 QuickBooks 错误。

有没有其他人遇到过这些类型的问题或知道可能是什么原因造成的?我需要这个应用程序像过去一样始终如一地工作!!

4

2 回答 2

0

QuickBooks 可能对谁在做什么很挑剔。更好的是,虽然我确信有一些逻辑条件可以使它 100% 可复制,但它抱怨用户访问似乎是随机的。

确保您的旧版 WinForms 应用程序和 QuickBooks 本身已安装并在同一用户帐户下运行。

另一种选择是更改 UAC 设置。

UAC 上的技术网:https ://technet.microsoft.com/en-us/library/cc709691%28v=ws.10%29.aspx

UAC 上的直觉和您呈现的错误代码:http: //support.quickbooks.intuit.com/support/articles/SLN40414

忽略那一点^^^。

QuickBooks Pro 2014 出现错误。我遇到过它在无人值守模式下运行,您的连接和会话在公司文件之间来回切换。

经过几次来回之后,他们的代码中发生了一些事情,当您 .EndSession/.CloseConnection 时,QuickBooks exe 没有关闭。然后,当您尝试打开下一个连接时,异常会冒泡,您会收到 InterOp 异常。

我最终不得不做的是关闭连接后,等待半秒钟,然后,如果 QB32 正在运行,则将其杀死。这是一个糟糕的修复,但我别无选择,而且它有效。

    // closeConnection is from Intuit's SessionManager.cs that gets installed with the SDK
    private void closeConnection(bool logError)
    {
        try
        {
            endSession(true);

            if (_bConnOpen)
            {
                _sessionMgr.CloseConnection();
                System.Threading.Thread.Sleep(waitTime);
                KillQB32W();
                _queryResponse = null;
                _bConnOpen = false;
            }
        }
        catch (Exception e)
        {
            if (logError)
                logger.logCritical("SessionManager.CloseConnection", e.Message);

            throw;
        }
    }



    private void KillQB32W()
    {
        System.Diagnostics.Process[] oProcess = System.Diagnostics.Process.GetProcessesByName("QBW32");

        foreach (System.Diagnostics.Process q in oProcess)
        {
            if (!q.HasExited)
            {
                q.Kill();
                System.Diagnostics.Debug.WriteLine("Killer");
            }

        }

    }
于 2015-03-10T14:02:42.157 回答
0

确保未选中保持 QuickBooks 运行的选项。

关闭所有打开的 QB 文件,并确保任务管理器中没有运行其他 QBW32.exe 文件。如果有,杀了他们。

再次尝试连接。

于 2014-04-25T14:48:52.173 回答