Colyn1337 Posted May 10, 2012 Share Posted May 10, 2012 (edited) So, I wrote this script which is a license fetcher and auto installer. It grabs the license code from a sqlite database file on a network share. The problem is, sometimes _SQLite_Startup() works, other times it produces an error. On my computer (64bit) and my VM's (32bit) everything goes well. Randomly in deployment, a computer will fail at the _SQLite_Startup() command. This is very frustrating because I cannot isolate a unique condition to the computers that fail. They're all Windows 7, some are 64 others are 32, in all cases the user has admin rights. Any guidance or thoughts would be appreciated. As I would want to see the code to offer assistance, please find mine below: expandcollapse popup#NoTrayIcon #include <SQLite.au3> #include <SQLite.dll.au3> #include <File.au3> #include <Array.au3> #include <Date.au3> Global $LogFile, $WsiInstallerPath, $DraftingInstallerPath, $DraftingName, $WsiName, $LicenseCode, $SQLpath, $hQuery, $aRow, $ExitChecker FileInstall("DraftingInstall.log", @ScriptDir, 1) $LogFile = (@ScriptDir & "DraftingInstall.log") ; Note the admin rights status If IsAdmin() <> 1 Then FileOpen($LogFile) FileWrite($LogFile, _NowDate() & " " & _NowTime() & ": The installer did not detect admin rights for this user." & @CRLF) FileClose($LogFile) EndIf ; Find the ini which contains the location of the SQLite file. The use of an ini file is so that ; when the database location changes, among other things, only the ini needs updated. If FileExists(@ScriptDir & "Draftingsqliteloc.ini") Then $SQLpath = IniRead(@ScriptDir & "Draftingsqliteloc.ini", "SQLLocation", "Path", "") $WsiInstallerPath = IniRead(@ScriptDir & "Draftingsqliteloc.ini", "WSIInstallerLocation", "Path", "") $WsiName = IniRead(@ScriptDir & "Draftingsqliteloc.ini", "WSIInstallerLocation", "Name", "") $DraftingInstallerPath = IniRead(@ScriptDir & "Draftingsqliteloc.ini", "DraftingInstallerLocation", "Path", "") $DraftingName = IniRead(@ScriptDir & "Draftingsqliteloc.ini", "DraftingInstallerLocation", "Name", "") ConsoleWrite($SQLpath & @LF) ConsoleWrite($DraftingInstallerPath & @LF) Else FileOpen($LogFile) FileWrite($LogFile, _NowDate() & " " & _NowTime() & ": The Draftingsqliteloc.ini is not in the same directory as the installer." & @CRLF) FileClose($LogFile) Exit (1) EndIf ; Grab the license code assigned to the user in the License DB _SQLite_Startup() If @error Then FileOpen($LogFile) FileWrite($LogFile, _NowDate() & " " & _NowTime() & ": The code that runs the SQL query failed. The _SQLite_Startup(" & '"' & "SQLite.dll" & '"' & ") command produced an error." & @CRLF) FileClose($LogFile) SetError(0) EndIf _SQLite_Open($SQLpath) Sleep(1000) _SQLite_Query(-1, 'SELECT Drafting FROM Install WHERE Username="' & @UserName & '";', $hQuery) ConsoleWrite('SELECT Drafting FROM Install WHERE Username="' & @UserName & '";' & @LF) If _SQLite_FetchData($hQuery, $aRow) = $SQLITE_OK Then Else FileOpen($LogFile) FileWrite($LogFile, _NowDate() & " " & _NowTime() & ": The code that runs the SQL query failed. The username is missing or is not entered correctly in the correct case. Error = " & @error & @CRLF) FileClose($LogFile) Exit (1) EndIf _SQLite_QueryFinalize($hQuery) _SQLite_Close() _SQLite_Shutdown() $LicenseCode = $aRow[0] I had previously programmed the scrip to exit if @error was set after _SQLite_Startup() was called. I removed the Exit call to see if the script would proceed to the next phases. EDIT: So, I figure the problem is in the <sqlite.dll.au3> file. I dropped the sqlite.dll file into the script directory and changed the script so that it reads _SQLite_Startup(@ScriptDir & "sqlite.dll"). This caused the script to work on one of the computers that wouldn't execute. Interestingly enough, using FileInstall("sqlite.dll", @ScriptDir, 1) doesn't work. It doesn't unpack the sqlite.dll file upon execution, I have to manually copy to file into the executing directory (I use c:Temp). And yea, the file was in the same directory as the script when I was compiling. Edited May 10, 2012 by Colyn1337 Link to comment Share on other sites More sharing options...
matwachich Posted May 10, 2012 Share Posted May 10, 2012 your FileInstall statement is wrong, you must do it like this FileInstall("sqlite.dll", @ScriptDir & "sqlite.dll", 1) Link to comment Share on other sites More sharing options...
jchd Posted May 10, 2012 Share Posted May 10, 2012 Just a note about that: since you're deploying apps using SQLite, you ought to only FileInstall the DLL. This is because the latest version of the SQLite3.dll.au3 doesn't contain both x86 and x64 versions of the DLL but will try to download the correct version from AutoIt repository. Relying to download in deployment is going to put useless heavy load on AutoIt server and slown down things at your end as well (and hit enterprise firewall in many cases). This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe hereRegExp tutorial: enough to get startedPCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta. SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt) Link to comment Share on other sites More sharing options...
Colyn1337 Posted May 10, 2012 Author Share Posted May 10, 2012 (edited) your FileInstall statement is wrong, you must do it like this FileInstall("sqlite.dll", @ScriptDir & "sqlite.dll", 1) Actually, I was missing the "". It works if you do FileInstall("sqlite.dll", @scriptdir & "", 1). The @scriptdir doesn't end in a "" to indicate a directory to the functions. Usually I declare my temp directory ahead and use a variable like so: $Test = (@ScriptDir & "") FileInstall("test.txt", $Test, 1) Exit The bummer is, that still doesn't explain why the _sqlite_startup() doesn't work consistently across computers.... The helpfile states "If SQLite.dll.au3 is included the dll will be created in @SystemDir." It also indicates the function looks in the @systemdir or the @scriptdir where I have the file manually. It's like it cannot find it, which is odd. I do appreciate you pointing out the error tho, I'd have been scratching my head on that one for awhile. Edited May 10, 2012 by Colyn1337 Link to comment Share on other sites More sharing options...
Colyn1337 Posted May 10, 2012 Author Share Posted May 10, 2012 (edited) Just a note about that: since you're deploying apps using SQLite, you ought to only FileInstall the DLL. This is because the latest version of the SQLite3.dll.au3 doesn't contain both x86 and x64 versions of the DLL but will try to download the correct version from AutoIt repository.Relying to download in deployment is going to put useless heavy load on AutoIt server and slown down things at your end as well (and hit enterprise firewall in many cases).That explains everything.... Do you happen to have the links to those (on hand of course)? I can tell my script to unpack the right one depending on os architecture.EDIT: I mean to say that I can then download them and FileInstall() to lessen the wear on the server. Edited May 10, 2012 by Colyn1337 Link to comment Share on other sites More sharing options...
ProgAndy Posted May 10, 2012 Share Posted May 10, 2012 (edited) You can find the link in SQLite.dll.au3. Here it is:http://www.autoitscript.com/autoit3/files/beta/autoit/archive/sqlite/The most recent versions are those without a date version in the name. Edited May 10, 2012 by ProgAndy *GERMAN* [note: you are not allowed to remove author / modified info from my UDFs]My UDFs:[_SetImageBinaryToCtrl] [_TaskDialog] [AutoItObject] [Animated GIF (GDI+)] [ClipPut for Image] [FreeImage] [GDI32 UDFs] [GDIPlus Progressbar] [Hotkey-Selector] [Multiline Inputbox] [MySQL without ODBC] [RichEdit UDFs] [SpeechAPI Example] [WinHTTP]UDFs included in AutoIt: FTP_Ex (as FTPEx), _WinAPI_SetLayeredWindowAttributes Link to comment Share on other sites More sharing options...
Colyn1337 Posted May 10, 2012 Author Share Posted May 10, 2012 You can find the link in SQLite.dll.au3. Here it is:http://www.autoitscript.com/autoit3/files/beta/autoit/archive/sqlite/The most recent versions are those without a date version in the name.Thank you kind sir! Link to comment Share on other sites More sharing options...
jchd Posted May 10, 2012 Share Posted May 10, 2012 Thanks for holding the bar ProgAndy This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe hereRegExp tutorial: enough to get startedPCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta. SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt) Link to comment Share on other sites More sharing options...
Colyn1337 Posted May 11, 2012 Author Share Posted May 11, 2012 Gentlemen, I thought you'd like to know that thanks to your assistance the problem is now resolved. My custom installer does not fail at the _sqlite_startup()... Or at all for that matter. Thanks again! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now