jawnah Posted February 19, 2009 Share Posted February 19, 2009 I've been working to get a GUI application that provides the status on a service as it starts functioning. I managed to work out all the issues I had with actually launching the process as a service and getting the GUI to appear. However, it appears as though, as a service, the GUI doesn't work properly. The GUI just seems to lock-up on me once the service is fully initialized. If you try to interact with it, it just says "Not Responding". I can't seem to determine why this locks up. If I take out the code to run this as a service, I don't have a problem with the process. Also, if I paint the screens PRIOR to calling the service initialization functions, they at least paint completely before locking-up. Any assistance would be appreciated. I've posted my code below: expandcollapse popup#include <Constants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <StaticConstants.au3> #include <EditConstants.au3> #include <UpdownConstants.au3> #include <Array.au3> #include <_Service.au3> #NoTrayIcon _Service_Init("POSSample2") ; Function to start the app Func main() Local $splashGui, $splashMsg, $splashText, $posProcess, $posOut, $startupString, $splashStatus, $splashProgress, $posOut2, $posOut3 Local $pubDirectoryBound, $startupSize, $startupCount, $tempLine, $tempLine2, $startupSteps, $arrayStartupSteps, $startupIncrement Local $readBuffer, $bufferArray, $startupTotal, $arrayPos Dim $arrayStartupSteps[1] _ArrayAdd($arrayStartupSteps, "Dispatcher.configureDispatcher(): local tech LogTechnician started.") _ArrayAdd($arrayStartupSteps, "Dispatcher.configureDispatcher(): local app APPLICATION started.") _ArrayDelete($arrayStartupSteps, 0) $splashGui = GUICreate("Splash Screen", 500, 300) $splashStatus = GUICtrlCreateLabel("POS Application Status", -1, 5, 500, 25, $SS_CENTER) $splashProgress = GUICtrlCreateProgress(5, 30, 495, 20) $splashText = GUICtrlCreateEdit("", -1, 50, 475, 250, $ES_MULTILINE + $ES_AUTOVSCROLL,$UDS_WRAP) GUISetState() GUICtrlSetData($splashText, "Starting application..." & @CRLF, 1) GUICtrlSetData($splashText, "There are " & String(UBound($arrayStartupSteps)) & " items in the startup array." & @CRLF, 1) $startupIncrement = 100 / UBound($arrayStartupSteps) $startupIncrement = Round($startupIncrement) GUICtrlSetData($splashText, "-- We will be using increments of " & String($startupIncrement) & " for status" & @CRLF, 1) GUICtrlSetData($splashText, "The length of CRLF is " & StringLen(@CRLF) & @CRLF, 1) ;$posProcess = Run("C:\someapp\someapp.bat", "C:\someapp",@SW_MINIMIZE,$STDOUT_CHILD + $STDERR_CHILD) Do $splashMsg = GUIGetMsg() ;$posOut = StdoutRead($posProcess) ;$readBuffer = $readBuffer & $posOut ;If Not StringInStr($posOut, @CRLF) Then ; ContinueLoop ;Else ; $bufferArray = StringSplit($readBuffer, @CRLF, 2) ; If Not StringRight($readBuffer, 2) = @CRLF Then ; $readBuffer = _ArrayPop($bufferArray) ; Else ; $readBuffer = "" ; EndIf ;EndIf ;For $i In $bufferArray ; If $i = "" Then ; ContinueLoop ; EndIf ; GUICtrlSetData($splashText, "-- Received: " & $i & @CRLF, 1) ;$arrayPos = _ArraySearch($arrayStartupSteps, $i) ;If $arrayPos > -1 Then ; GUICtrlSetData($splashText, "-- Found startup string!" & @CRLF, 1) ; $startupTotal = $startupTotal + $startupIncrement ; If $startupTotal > 100 Then ; $startupTotal = 100 ; EndIf ; GUICtrlSetData($splashProgress, $startupTotal) ; If $arrayPos = UBound($arrayStartupSteps) - 1 Then ; GUICtrlSetData($splashText, "-- Found last startup item, application done!" & @CRLF, 1) ; EndIf ;EndIf ; GUISetState() ;Next Until $splashMsg = $GUI_EVENT_CLOSE Exit EndFunc Func someFunc($sArgs, $iArgs) EndFunc jawnah--Have a blessed day :) Link to comment Share on other sites More sharing options...
jawnah Posted February 25, 2009 Author Share Posted February 25, 2009 Does anyone have any ideas on this issue? I haven't been able to resolve it myself. Any assistance would be appreciated. Thanks! I've been working to get a GUI application that provides the status on a service as it starts functioning. I managed to work out all the issues I had with actually launching the process as a service and getting the GUI to appear. However, it appears as though, as a service, the GUI doesn't work properly. The GUI just seems to lock-up on me once the service is fully initialized. If you try to interact with it, it just says "Not Responding". I can't seem to determine why this locks up. If I take out the code to run this as a service, I don't have a problem with the process. Also, if I paint the screens PRIOR to calling the service initialization functions, they at least paint completely before locking-up. Any assistance would be appreciated. I've posted my code below: expandcollapse popup#include <Constants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <StaticConstants.au3> #include <EditConstants.au3> #include <UpdownConstants.au3> #include <Array.au3> #include <_Service.au3> #NoTrayIcon _Service_Init("POSSample2") ; Function to start the app Func main() Local $splashGui, $splashMsg, $splashText, $posProcess, $posOut, $startupString, $splashStatus, $splashProgress, $posOut2, $posOut3 Local $pubDirectoryBound, $startupSize, $startupCount, $tempLine, $tempLine2, $startupSteps, $arrayStartupSteps, $startupIncrement Local $readBuffer, $bufferArray, $startupTotal, $arrayPos Dim $arrayStartupSteps[1] _ArrayAdd($arrayStartupSteps, "Dispatcher.configureDispatcher(): local tech LogTechnician started.") _ArrayAdd($arrayStartupSteps, "Dispatcher.configureDispatcher(): local app APPLICATION started.") _ArrayDelete($arrayStartupSteps, 0) $splashGui = GUICreate("Splash Screen", 500, 300) $splashStatus = GUICtrlCreateLabel("POS Application Status", -1, 5, 500, 25, $SS_CENTER) $splashProgress = GUICtrlCreateProgress(5, 30, 495, 20) $splashText = GUICtrlCreateEdit("", -1, 50, 475, 250, $ES_MULTILINE + $ES_AUTOVSCROLL,$UDS_WRAP) GUISetState() GUICtrlSetData($splashText, "Starting application..." & @CRLF, 1) GUICtrlSetData($splashText, "There are " & String(UBound($arrayStartupSteps)) & " items in the startup array." & @CRLF, 1) $startupIncrement = 100 / UBound($arrayStartupSteps) $startupIncrement = Round($startupIncrement) GUICtrlSetData($splashText, "-- We will be using increments of " & String($startupIncrement) & " for status" & @CRLF, 1) GUICtrlSetData($splashText, "The length of CRLF is " & StringLen(@CRLF) & @CRLF, 1) ;$posProcess = Run("C:\someapp\someapp.bat", "C:\someapp",@SW_MINIMIZE,$STDOUT_CHILD + $STDERR_CHILD) Do $splashMsg = GUIGetMsg() ;$posOut = StdoutRead($posProcess) ;$readBuffer = $readBuffer & $posOut ;If Not StringInStr($posOut, @CRLF) Then ; ContinueLoop ;Else ; $bufferArray = StringSplit($readBuffer, @CRLF, 2) ; If Not StringRight($readBuffer, 2) = @CRLF Then ; $readBuffer = _ArrayPop($bufferArray) ; Else ; $readBuffer = "" ; EndIf ;EndIf ;For $i In $bufferArray ; If $i = "" Then ; ContinueLoop ; EndIf ; GUICtrlSetData($splashText, "-- Received: " & $i & @CRLF, 1) ;$arrayPos = _ArraySearch($arrayStartupSteps, $i) ;If $arrayPos > -1 Then ; GUICtrlSetData($splashText, "-- Found startup string!" & @CRLF, 1) ; $startupTotal = $startupTotal + $startupIncrement ; If $startupTotal > 100 Then ; $startupTotal = 100 ; EndIf ; GUICtrlSetData($splashProgress, $startupTotal) ; If $arrayPos = UBound($arrayStartupSteps) - 1 Then ; GUICtrlSetData($splashText, "-- Found last startup item, application done!" & @CRLF, 1) ; EndIf ;EndIf ; GUISetState() ;Next Until $splashMsg = $GUI_EVENT_CLOSE Exit EndFunc Func someFunc($sArgs, $iArgs) EndFunc jawnah--Have a blessed day :) Link to comment Share on other sites More sharing options...
dillonlim Posted February 26, 2009 Share Posted February 26, 2009 Did you try enabling "Allow service to interact with desktop"? I've been working to get a GUI application that provides the status on a service as it starts functioning. I managed to work out all the issues I had with actually launching the process as a service and getting the GUI to appear. However, it appears as though, as a service, the GUI doesn't work properly. The GUI just seems to lock-up on me once the service is fully initialized. If you try to interact with it, it just says "Not Responding". I can't seem to determine why this locks up. If I take out the code to run this as a service, I don't have a problem with the process. Also, if I paint the screens PRIOR to calling the service initialization functions, they at least paint completely before locking-up. Any assistance would be appreciated. I've posted my code below: expandcollapse popup#include <Constants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <StaticConstants.au3> #include <EditConstants.au3> #include <UpdownConstants.au3> #include <Array.au3> #include <_Service.au3> #NoTrayIcon _Service_Init("POSSample2") ; Function to start the app Func main() Local $splashGui, $splashMsg, $splashText, $posProcess, $posOut, $startupString, $splashStatus, $splashProgress, $posOut2, $posOut3 Local $pubDirectoryBound, $startupSize, $startupCount, $tempLine, $tempLine2, $startupSteps, $arrayStartupSteps, $startupIncrement Local $readBuffer, $bufferArray, $startupTotal, $arrayPos Dim $arrayStartupSteps[1] _ArrayAdd($arrayStartupSteps, "Dispatcher.configureDispatcher(): local tech LogTechnician started.") _ArrayAdd($arrayStartupSteps, "Dispatcher.configureDispatcher(): local app APPLICATION started.") _ArrayDelete($arrayStartupSteps, 0) $splashGui = GUICreate("Splash Screen", 500, 300) $splashStatus = GUICtrlCreateLabel("POS Application Status", -1, 5, 500, 25, $SS_CENTER) $splashProgress = GUICtrlCreateProgress(5, 30, 495, 20) $splashText = GUICtrlCreateEdit("", -1, 50, 475, 250, $ES_MULTILINE + $ES_AUTOVSCROLL,$UDS_WRAP) GUISetState() GUICtrlSetData($splashText, "Starting application..." & @CRLF, 1) GUICtrlSetData($splashText, "There are " & String(UBound($arrayStartupSteps)) & " items in the startup array." & @CRLF, 1) $startupIncrement = 100 / UBound($arrayStartupSteps) $startupIncrement = Round($startupIncrement) GUICtrlSetData($splashText, "-- We will be using increments of " & String($startupIncrement) & " for status" & @CRLF, 1) GUICtrlSetData($splashText, "The length of CRLF is " & StringLen(@CRLF) & @CRLF, 1) ;$posProcess = Run("C:\someapp\someapp.bat", "C:\someapp",@SW_MINIMIZE,$STDOUT_CHILD + $STDERR_CHILD) Do $splashMsg = GUIGetMsg() ;$posOut = StdoutRead($posProcess) ;$readBuffer = $readBuffer & $posOut ;If Not StringInStr($posOut, @CRLF) Then ; ContinueLoop ;Else ; $bufferArray = StringSplit($readBuffer, @CRLF, 2) ; If Not StringRight($readBuffer, 2) = @CRLF Then ; $readBuffer = _ArrayPop($bufferArray) ; Else ; $readBuffer = "" ; EndIf ;EndIf ;For $i In $bufferArray ; If $i = "" Then ; ContinueLoop ; EndIf ; GUICtrlSetData($splashText, "-- Received: " & $i & @CRLF, 1) ;$arrayPos = _ArraySearch($arrayStartupSteps, $i) ;If $arrayPos > -1 Then ; GUICtrlSetData($splashText, "-- Found startup string!" & @CRLF, 1) ; $startupTotal = $startupTotal + $startupIncrement ; If $startupTotal > 100 Then ; $startupTotal = 100 ; EndIf ; GUICtrlSetData($splashProgress, $startupTotal) ; If $arrayPos = UBound($arrayStartupSteps) - 1 Then ; GUICtrlSetData($splashText, "-- Found last startup item, application done!" & @CRLF, 1) ; EndIf ;EndIf ; GUISetState() ;Next Until $splashMsg = $GUI_EVENT_CLOSE Exit EndFunc Func someFunc($sArgs, $iArgs) EndFunc 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