You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QBFC10调用sessionManager.BeginSession触发System.AccessViolationException求助

QBFC10调用BeginSession指定文件路径触发AccessViolationException问题解决

使用QBFC10开发时,调用sessionManager.BeginSession(@"D:\CompanyFile.qbw", ENOpenMode.omDontCare)触发如下异常:

System.AccessViolationException: 'Attempted to read or write protected memory. This is often an indication that other memory is corrupt.'

若将文件路径设为空字符串"",代码可正常执行,但无法实现在QuickBooks未运行时指定文件启动的需求。

相关代码:

private void BtnQuery_Click(object sender, EventArgs e)
{
    bool sessionBegun = false;
    bool connectionOpen = false;
    QBSessionManager sessionManager = null;

    try
    {
        sessionManager = new QBSessionManager();
        IMsgSetRequest requestMsgSet = sessionManager.CreateMsgSetRequest("US", 10, 0);
        requestMsgSet.Attributes.OnError = ENRqOnError.roeContinue;

        IItemInventoryQuery ItemInventoryQueryRq = requestMsgSet.AppendItemInventoryQueryRq();

        sessionManager.OpenConnection2("", "AppName", ENConnectionType.ctLocalQBD);
        connectionOpen = true;
        sessionManager.BeginSession(@"D:\CompanyFile.qbw", ENOpenMode.omDontCare);
        sessionBegun = true;

        IMsgSetResponse responseMsgSet = sessionManager.DoRequests(requestMsgSet);

        sessionManager.EndSession();
        sessionBegun = false;
        sessionManager.CloseConnection();
        connectionOpen = false;

        String xml = responseMsgSet.ToXMLString();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Error");
        if (sessionBegun)
        {
            sessionManager.EndSession();
        }
        if (connectionOpen)
        {
            sessionManager.CloseConnection();
        }
    }
}

解决建议

  • 验证文件路径与权限
    确认D:\CompanyFile.qbw路径完全正确,文件存在且未被锁定;同时确保程序拥有该文件及所在目录的读写权限,必要时以管理员身份运行程序,或调整文件夹的安全权限。

  • 匹配QBFC与QuickBooks版本
    QBFC10仅兼容QuickBooks 2010版本,若使用更高版本的QuickBooks,需升级QBFC到对应版本(如QBFC13对应QB 2013等)。此外,可尝试重新注册QBFC组件:

    regsvr32 "C:\Program Files (x86)\Intuit\QBFC10\bin\QBFC10.dll"
    

    注意替换为实际安装路径,需管理员权限执行。

  • 修改打开模式参数
    将ENOpenMode.omDontCare替换为明确的打开模式,比如omSingleUser或omMultiUser,避免模糊模式引发的内存访问问题:

    sessionManager.BeginSession(@"D:\CompanyFile.qbw", ENOpenMode.omSingleUser);
    
  • 排查文件锁定与QB运行状态
    确保无其他进程占用该QBW文件(如后台QB实例、备份程序、杀毒扫描),可重启系统后再测试。若QB未运行,需确认系统权限未阻止QBFC启动QB实例。

  • 调试.NET与QBFC交互问题
    清理项目的bin/obj目录后重新编译;将项目目标平台切换为x86(QBFC为32位组件,AnyCPU模式可能引发兼容性问题)。

内容的提问来源于stack exchange,提问作者RickyBelmont

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 15:57:20