2

2 つの QuickBooks ファイルに接続する従来の WinForms C# アプリケーションをサポートしています。QuickBooks 2008 と QuickBooks 2011 の両方で、何年もの間非常にうまく機能しています。

数日前、クライアントは QuickBooks 2014 にアップグレードされました。それ以来、アプリケーションは QuickBooks ファイルに正常に接続されていません。アプリケーションを手動で実行すると、System.Runtime.InteropServices.COMException (0x80040408): Could not start Quickbooks. という .NET エラーがスローされます。

私が使用しているバージョン 8.0 の SDK が実際に QB 2014 に接続できることを確認するためにテストすることにしました。そのため、SDKTestPlus3 アプリケーションを実行しました。会社のファイルに接続しようとすると、その会社のファイルに接続する権限がアプリケーションにないというメッセージが表示されます。そこで、QB で会社のファイルを開き、シングル ユーザー モードにして、もう一度試してみました。そのアプリケーションに接続する権利を与えるように求めるポップアップが表示されることを期待していました。代わりに、QB で開いているファイルにシングル ユーザー モードで接続しようとすると、SDKTestPlus3 で「QuickBooks 会社データ ファイルが既に開かれており、要求されたものとは異なるか、複数の会社ファイルが開いています。」というエラーが表示されました。

ここで誰かが私を正しい方向に向けることができますか。QBFC8 は QB 2014 と互換性がありますか? 互換性がある場合、QB 2011 で長い間使用されてきたこのアプリケーションを QB 2014 で引き続き使用するために必要なことはありますか?

ティア!

追加情報

QhickBooks への接続エラーが断続的に発生しているように見えることに気付きました。WinForms アプリケーションは、毎朝午前 1 時に Windows のスケジュールされたタスクによって実行されます。月曜日に 2014 年にアップグレードして以来、火曜日、水曜日、木曜日の朝に失敗しました。今日のログ ファイルを見ると、今朝、QBで正常に接続され、レコードが処理されました。ここで、(0x80040408) の代わりに手動で実行しようとすると、Quickbooks COM エラーを開始できませんでした代わりに、COM エラー (0x8004041C) が発生しました: QuickBooks の会社データ ファイルにアクセスしようとしたときに内部 QuickBooks エラーが発生しました。

他の誰かがこれらのタイプの問題を経験したことがありますか、または何が原因である可能性があるか考えていますか? このアプリケーションが以前と同じように一貫して動作する必要があります!!

4

2 に答える 2

0

QuickBooks は、誰が何をしているかについてうるさい場合があります。さらに良いことに、100% 複製可能にする一連の論理条件があることは確かですが、一見ランダムに見えるユーザー アクセスについて不平を言っています。

従来の WinForms アプリケーションと QuickBooks 自体がインストールされ、同じユーザー アカウントで実行されていることを確認してください。

別のオプションは、UAC 設定を変更することです。

UAC の Technet: 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 例外が発生します。

私がしなければならなかったのは、接続を閉じた後、0.5秒ほど待ってから、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 に答える