【问题标题】:WinForms Application won't connect after QB 2014 upgradeQB 2014 升级后 WinForms 应用程序无法连接
【发布时间】:2014-04-25 14:16:08
【问题描述】:

我支持连接到 2 个 QuickBooks 文件的旧版 WinForms C# 应用程序。多年来,它在 QuickBooks 2008 和 QuickBooks 2011 中运行良好。

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

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

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

TIA!

附加信息

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

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

【问题讨论】:

  • 时至今日,这仍然是一个巨大的问题。有人遇到过这种情况么?我估计应用程序在 50% 的时间内成功连接。

标签: quickbooks intuit-partner-platform qbfc


【解决方案1】:

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

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

再次尝试连接。

【讨论】:

  • 我确保没有其他 QB 实例正在运行,也没有 QBW32.exe 正在运行。我在任何地方都没有看到“保持 QuickBooks 运行”复选框,我在哪里可以找到它?
  • 它位于首选项 - 常规选项卡中。 2014 年的补丁版本是什么?
  • 它说的是 QB Pro 2104。我取消选中 Keep QuickBooks running 选项,SDKTestPlus 应用程序仍然无法连接。
  • 打开 QuickBooks,按 F2 键,告诉我们顶部“产品”行中的内容。希望它在该行末尾附近显示类似“R5P”的内容,这就是 William 所指的补丁版本。
  • QuickBooks Pro 2014 版 R5P
【解决方案2】:

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-06-19
    • 2010-10-01
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 2022-06-15
    • 2019-01-11
    相关资源
    最近更新 更多