Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com X-Injected-Via-Gmane: http://gmane.org/ To: cygwin AT cygwin DOT com From: "BB" Subject: Re: cron on Win9x works Date: Tue, 15 Apr 2003 10:13:44 -0500 Lines: 189 Message-ID: References: Reply-To: "BB" X-Complaints-To: usenet AT main DOT gmane DOT org X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2800.1106 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106 "Igor Pechtchanski" wrote in message news:Pine DOT GSO DOT 4 DOT 44 DOT 0304111826300 DOT 26381-100000 AT slinky DOT cs DOT nyu DOT edu... > On Fri, 11 Apr 2003, BB wrote: > > > "Igor Pechtchanski" wrote in message news:Pine DOT GSO DOT 4 DOT 44 DOT 0304111656100 DOT 26381-100000 AT slinky DOT cs DOT nyu DOT edu... > > > On Fri, 11 Apr 2003, BB wrote: > > > > > > > Igor, > > > > ---------------------- > > > > cron/crontab on win9x: > > > > > > > > I don't think there is any way to change a directory's creation time > > > > on Win9x, so cron cannot be signalled to read the new tabs. The > > > > CreatFile flag FILE_FLAG_BACKUP_SEMANTICS is what does it on > > > > NT/2K/XP. According to the MSDN, the flag is not supported on Win9x. > > > > > > According to MSDN, you cannot open a directory using CreateFile at all on > > > Win9x. You should use CreateDirectory. > > > > CreateDirectory creates a directory, it doesn't open it. It doesn't > > return a handle to the directory. Using CreateFile on WinNT/2K/XP, the > > directory handle is then passed to SetFileTime. > > Umm, I don't know if CreateDirectoryEx will do the right thing here... I > mean, first CreateDirectory("somedir"), then use "somedir" as a template > for the directory we're trying to touch... I'll have to try it out on my > Win98 machine... I don't think CreateDirectoryEx will do the trick either. I think that in order to touch the directory timestamp without deleting it and recreating it, we need a handle to it. CreateFile is the only way I can find, but it doesnt work on Win9x. I think the solution would be for cron to detect a change using either FindFirstChangeNotification or looping through the files to get their timestamps. I'll try FindFirstChangeNotification. Maybe we can get a patch for this done soon to put it to rest. > > > [snip] > > > > ------------------- > > > > cygrunsrv on Win9x: > > > > > > > > When running cron as a 9x 'service', hiding the window is not the only > > > > problem. Getting the app to terminate when the system shuts down is the > > > > problem I've been dealing with. By using an win gui app, I can monitor > > > > the messages to a hidden window to get the ENDSESSION message. But, any > > > > code you have might help, especially if it eliminates the need to make > > > > it a GUI app with a hidden window. > > > > > > Umm, not really... But it does eliminate the windows created when the > > > service is run... > > > > > > > After a quick analysis, I think cygrunsrv could be modified. If I > > > > modify cygrunsrv, I think I would need to change it to use WinMain() > > > > so it's a GUI app. On Win9x, it would create a window so it could > > > > get the ENDSESSION message at system shutdown. > > > > > > Hmm, I suggest another approach: write a rudimentary service manager for > > > Win9x. This is not as bad as it sounds: you'll have only one process that > > > will watch for the ENDSESSION message, and it'll have a similar interface > > > to the NT service manager, so cygrunsrv wouldn't need to be changed > > > (much). > > > > This sounds like more work than I have time for now. I need a quick > > solution to get cron and init running as Win9x services with no window > > and a clean shutdown. > > Rebooting the machine is not a problem to get it going for my 'short > > term' need. > > Yes. I was thinking long-term... Even if we don't get to implement any > of this now, the discussion is going to stay in the archives, in case > someone wants to take a shot at it later. > > > I'll think about it over the weekend. I would imagine on Win9x the > > cygwin service manager could be a GUI app that is started based on a > > RunServices entry. > > Right. You'd only have to do that once, and then simply send it requests. > > > What method of communication between cygrunsrv and the services manager > > would you suggest for registering, unregistering, starting and stopping > > services. > > I suppose the regular PostMessage should work. If we want to do this > right, we'd have to implement part of the ServiceManager API (that > cygrunsrv uses). If we succeed, cygrunsrv would be identical for both > Win9x and WinNT/2k/XP. I'm guessing OpenSCManager will return a process > handle, OpenService would return some other handle (I'm not quite sure, > perhaps a pointer to a service data structure within the service manager), > and then StartService, ControlService, CreateService, etc would send the > appropriate messages to the service manager. Does this sound feasible? > It does look like quite a bit of work, though... > Igor We could implement the cygwin service manager as a dll. cygrunsrv would be modified to call it all the time regardless of win version. The dll would map calls to either the actual WinNT service manager with almost no overhead or it own version forWin9x. The service manager part of the dll could be started on Win9x by using RUNDLL32.EXE. All communication between cyrunsrv and the service manager would be handled within the DLLs code. > > > > Option -I would write an entry to the regitry key > > > > HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices > > > > such as init with the string value value C:\cygwin\cygrunsrv.exe -S init > > > > It would need to store the parameters for init somewhere. Maybe they > > > > could be stored in an init key under RunServices. > > > > > > Or we could create a completely new key... ;-) > > > > > > > The -S option on Win9x would only be modified to run the service rather > > > > than call the service manager to start it. This is how Win9x would call > > > > cygrunsrv at startup. The options stored in the registry would be used > > > > to run the service. cygrunsrv wouldnt return in this case until the > > > > service exited. register_9x_service(); would be called so the service > > > > would not be shut down when the user logs out. On Win9x, a hidden > > > > window would be created so the app would be terminated at system > > > > shutdown. On termination, the term signal would be sent to the > > > > 'service'. If you have a better way to hide the window, maybe WinMain > > > > would not be needed. > > > > > > The "service manager" could be a GUI app with a hidden window. It'll only > > > need to respond to the messages from cygrunsrv and the ENDSESSION message. > > > > > > > By the way, is there and existing function that will convert the WinMain > > > > lpCmdLine or GetCommandLine() arguments to argc, argv format? > > > > > > Yes. It's called WinMain in MSVCRT*.dll (or other C runtimes). > > > > > > > The -R option would simply remove the registry entries > > > > > > Makes sense. > > > > > > > The -E stop option would not be supported. > > > > > > Why not? If we have our own "service manager", it could simply issue a > > > signal to the service app, same way it happens on NT... > > > > > > > To actually run a service based on the RunServices registry entry, the > > > > system would need to be shut down and restarted. > > > > > > Ugh... Ugly. I'd much rather the "service manager" always ran as service > > > (so restart is unavoidable if you want to start it), but later any > > > services you wish to run could be run through the already running service > > > (thus no restart required). > > > Igor > > > > > [snip] > > -- > http://cs.nyu.edu/~pechtcha/ > |\ _,,,---,,_ pechtcha AT cs DOT nyu DOT edu > ZZZzz /,`.-'`' -. ;-;;,_ igor AT watson DOT ibm DOT com > |,4- ) )-,_. ,\ ( `'-' Igor Pechtchanski > '---''(_/--' `-'\_) fL a.k.a JaguaR-R-R-r-r-r-.-.-. Meow! > > Knowledge is an unending adventure at the edge of uncertainty. > -- Leto II > > -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Bug reporting: http://cygwin.com/bugs.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/