I have been asked to create a program that runs on Windows as a process and notifies users when local software patches are available. I would like to use Perl for a number of reasons:
- It must run as a process in the background (no permanent open command windows) on the enduser's computer with minimal conflicts.
- It will run on/serve multiple platforms currently defined as NT351_W, NT40_w, Win2000_w or Win95-98-ME.
- It shouldn't hog too many resources, particularly memory.
- Update information is stored on a Solaris 8.0 Sun box.
- Cannot assume that Perl/whatever is installed on enduser boxes, so must use a standalone executable.
Plan:
- Set up an Unix account running a restricted shell that takes the platform string, returns the patch timestamp/file size and logs the user off.
- Use Win32::Process in combination with TK to provide minimal interaction.
- First time the application runs determine the OS in use (by Perl if possible, but combo box type selection OK) and save in a config file.
- Use Net::Telnet to log onto Unix account and capture the patch parameters. Maybe there are other modules to use but I need to keep things simple given the time constraint.
- Notify the enduser if an update is available, Sleep for several hours, rinse/repeat.
Concerns:
- I've heard unflattering things about Perl "Compilers" perlcc and Perl2exe. I've never been able to get perlcc to do anything but Perl2Exe seems to work (although I'll have to investigate the -small, -tiny and -gui options).
- If I use the -gui to create a no-console executable maybe I can bypass the use of Win32::Process. Something I'll test and update RE.
- I'm sure that there will probably be some gotchas along the way. This is where I could use some feedback.
I realize that this is sketchy at best and I'm probably leaving some things out. For small projects I usually just form a mental plan and attack, which has worked fine for me in the past. I suppose hanging around the Monastery is having a positive effect on me. Putting things into "type" has helped me to define tasks more clearly and forces me to think things through (besides I hate making a fool of myself in front of such a learned audience).
Please, any feedback is welcomed, no need for code (unless it illustrates a gotcha of course). Are there alternatives I'm overlooking that might simplify the task without violating the constraints?
"All are lunatics, but he who can analyze his delusion is called a
philosopher." -- Ambrose Bierce