Joshjosh Posted November 4, 2007 Share Posted November 4, 2007 Hey guys, A have a service running called "music" which runs a command line mp3 player that points to a playlist. Now what I want to do is restart this service if the playlist file changes (i.e. I over-write it with a newer one) and therefore it picks up the new songs. Any help with this would be much appreciated!! Link to comment Share on other sites More sharing options...
MadBoy Posted November 4, 2007 Share Posted November 4, 2007 Hey guys, A have a service running called "music" which runs a command line mp3 player that points to a playlist. Now what I want to do is restart this service if the playlist file changes (i.e. I over-write it with a newer one) and therefore it picks up the new songs. Any help with this would be much appreciated!! Both servicecontrol.au3 and service.au3 are taken from here http://www.autoitscript.com/forum/index.php?showtopic=42443 expandcollapse popup#include <ServiceControl.au3> #include <Service.au3> Global $file_to_monitor = "C:\Version.txt" Global $on_start_value = CheckForFileUpdate($file_to_monitor) While 1 Sleep(1000) $return_date = CheckForFileUpdate($file_to_monitor) If $return_date <> $on_start_value Then _RestartServices() ; restarts service 'Music', could have some error checking here $on_start_value = $return_date ; resets the on_start_value to newest date / time value EndIf WEnd Func CheckForFileUpdate($file_to_check) $file_time = FileGetTime($file_to_check, 1) If Not @error Then $yyyymd = $file_time[0] & "/" & $file_time[1] & "/" & $file_time[2] $hhmmss = $file_time[3] & ":" & $file_time[4] & ":" & $file_time[5] Return $yyyymd & " " & $hhmmss EndIf EndFunc ;==>CheckForFileUpdate Func _RestartServices() Local $time1, $time2 If _ServiceExists ("", "Music") = 1 Then If _ServGetState("Music") = "Running" Then _StopService ("", "Music") EndIf $time1 = TimerInit() Do Sleep(1000) If _ServGetState("Music") = "Stopped" Then ExitLoop Until TimerDiff($time1) > 20000 _StartService("", "Music") $time2 = TimerInit() Do Sleep(1000) If _ServGetState("Music") = "Running" Then Return "1" Until TimerDiff($time2) > 20000; check timeout EndIf Return "0" EndFunc ;==>_RestartServices Work from that service.au3servicecontrol.au3 My little company: Evotec (PL version: Evotec) Link to comment Share on other sites More sharing options...
Joshjosh Posted November 4, 2007 Author Share Posted November 4, 2007 thanks for that madboy, its much appreciated. I have compiled it and attempted to run but unfortuantely nothing happens. The service is present along with the version file but no action. Any ideas? Link to comment Share on other sites More sharing options...
MadBoy Posted November 5, 2007 Share Posted November 5, 2007 thanks for that madboy, its much appreciated.I have compiled it and attempted to run but unfortuantely nothing happens. The service is present along with the version file but no action. Any ideas?Have you changedGlobal $file_to_monitor = "C:\Version.txt" to your file? Also keep in mind that the code i gave you when started it doesn't restart the service at all. It just gathers information. Just the next time the file is changed it will restart service. My little company: Evotec (PL version: Evotec) Link to comment Share on other sites More sharing options...
MadBoy Posted November 5, 2007 Share Posted November 5, 2007 Have you changedGlobal $file_to_monitor = "C:\Version.txt" to your file? Also keep in mind that the code i gave you when started it doesn't restart the service at all. It just gathers information. Just the next time the file is changed it will restart service. Sorry it's not working because it's getting the date of creation and not the date of modification. I'll try to fix. My little company: Evotec (PL version: Evotec) Link to comment Share on other sites More sharing options...
MadBoy Posted November 5, 2007 Share Posted November 5, 2007 Sorry it's not working because it's getting the date of creation and not the date of modification. I'll try to fix. expandcollapse popup#include <ServiceControl.au3> #include <Service.au3> Global $file_to_monitor = "C:\Version.txt" Global $on_start_value = CheckForFileUpdate($file_to_monitor) While 1 Sleep(1000) $return_date = CheckForFileUpdate($file_to_monitor) ;ConsoleWrite(@CRLF & $return_date & " - " & $on_start_value) If $return_date <> $on_start_value Then _RestartServices() ; restarts service 'Music', could have some error checking here $on_start_value = $return_date ; resets the on_start_value to newest date / time value EndIf WEnd Func CheckForFileUpdate($file_to_check) $file_time = FileGetTime($file_to_check, 0) If Not @error Then $yyyymd = $file_time[0] & "/" & $file_time[1] & "/" & $file_time[2] $hhmmss = $file_time[3] & ":" & $file_time[4] & ":" & $file_time[5] Return $yyyymd & " " & $hhmmss EndIf Return 0 EndFunc ;==>CheckForFileUpdate Func _RestartServices() Local $time1, $time2 If _ServiceExists ("", "Music") = 1 Then If _ServGetState("Music") = "Running" Then _StopService ("", "Music") EndIf $time1 = TimerInit() Do Sleep(1000) If _ServGetState("Music") = "Stopped" Then ExitLoop Until TimerDiff($time1) > 20000 _StartService("", "Music") $time2 = TimerInit() Do Sleep(1000) If _ServGetState("Music") = "Running" Then Return "1" Until TimerDiff($time2) > 20000; check timeout EndIf Return "0" EndFunc ;==>_RestartServices That should fix it. My little company: Evotec (PL version: Evotec) Link to comment Share on other sites More sharing options...
Joshjosh Posted November 5, 2007 Author Share Posted November 5, 2007 Hey MadBoy, I appreciated all your help and dont mean to be a pain but I still am not having much luck. I have created the Version.txt file under C:\ and started the compiled exe from the code above. When i make changes to the version.txt file nothing happens. I do noticed that the AutoScript icon flashes between the normal icon and red cross and when you right click on it it says its paused. Any ideas? I assume this means the script doesnt run properly. Is it case sensitive at all? Any help would be much appreciated. Link to comment Share on other sites More sharing options...
Joshjosh Posted November 5, 2007 Author Share Posted November 5, 2007 scratch that, it is case sensitive, I have the service install as "music" and not "Music". Reinstalled service as Music and it works a treat. Thankyou so much for your help, it is greatly appreciated. Link to comment Share on other sites More sharing options...
MadBoy Posted November 6, 2007 Share Posted November 6, 2007 scratch that, it is case sensitive, I have the service install as "music" and not "Music". Reinstalled service as Music and it works a treat. Thankyou so much for your help, it is greatly appreciated.You should be aware that clicking on the icon pauses the script. So if you got near the autoit icon you have paused it by accident That's why it wasn't working aswell. My little company: Evotec (PL version: Evotec) 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