I am getting error -2147220472 when I try to connect to Quickbooks. The application is executed by a windows service. The log file is as follows:
I 8788 RequestProcessor ========= Started Connection =========
I 8788 RequestProcessor Request Processor, QBXMLRP2 v12.0
I 8788 RequestProcessor Connection opened by app named 'QBWatcher'
I 8788 RequestProcessor OS: Microsoft Professional (build 9200), 64-bit
I 8788 RequestProcessor Current Process is elevated
I 8788 RequestProcessor Current User is in AdminGroup
I 8788 RequestProcessor Current Process is ran as Admin
I 8788 RequestProcessor Current Process Integrity Level : 3000
I 8788 RequestProcessor Previous instance of QB is going down..! Wait and retry to get a new instance.
I 8788 RequestProcessor Previous instance of QB is going down..! Wait and retry to get a new instance.
I 8788 RequestProcessor Previous instance of QB is going down..! Wait and retry to get a new instance.
I 8788 RequestProcessor Previous instance of QB is going down..! Wait and retry to get a new instance.
I 8788 RequestProcessor Previous instance of QB is going down..! Wait and retry to get a new instance.
E 8788 RequestProcessor Could not find or create an instance of QuickBooks using InstanceFinder
I 8788 RequestProcessor Connection closed by app named 'QBWatcher'
I 8788 RequestProcessor ========== Ended Connection ==========
I 8788 CertVerifier The file does not contain an Authenticode signature.
This actually works at times, but I can't see a pattern. What might be causing this?
In a nutshell, the code being used to connect is as follows:
qbxmlConn.OpenConnection2(filename, "QBWatcher", QBXMLRP2Lib.QBXMLRPConnectionType.localQBD);
QBXMLRP2Lib.IAuthPreferences qbAuthPrefs = qbxmlConn.AuthPreferences;
qbAuthPrefs.PutPersonalDataPref(QBXMLRP2Lib.QBXMLRPPersonalDataPrefType.pdpNotNeeded);
qbAuthPrefs.PutUnattendedModePref(QBXMLRP2Lib.QBXMLRPUnattendedModePrefType.umpOptional);
ticket = qbxmlConn.BeginSession(filename, QBXMLRP2Lib.QBFileMode.qbFileOpenDoNotCare);
This is the key to this question:
Due to the way QuickBooks works, trying to connect to QuickBooks from a Windows service (e.g. a little program that sits and runs in the background instead of an end-user program with a GUI) will never work reliably.
QuickBooks uses a GUI message pump to power the SDK - so if there's no GUI available (e.g. like in a Windows service that runs even when there are no users logged on to the machine) then the SDK/API won't be available.
Sorry for the bad news. :-/
Can you make your program have a simple GUI and only run when a user is logged on (lock the screen if they need to leave the computer) instead?