Recipe10.13.Checking and Modifying the Set of Tasks Windows Automatically Runs at Login


Recipe 10.13. Checking and Modifying the Set of Tasks Windows Automatically Runs at Login

Credit: Daniel Kinnaer

Problem

You need to check which tasks Windows is set to automatically run at login and possibly change this set of tasks.

Solution

When administering Windows machines, it's crucial to keep track of the tasks each machine runs at login. Like so many Windows tasks, this requires working with the registry, and standard Python module _winreg enables this:

import _winreg as wr aReg = wr.ConnectRegistry(None, wr.HKEY_LOCAL_MACHINE) try:     targ = r'SOFTWARE\Microsoft\Windows\CurrentVersion\Run'     print "*** Reading from", targ, "***"     aKey = wr.OpenKey(aReg, targ)     try:         for i in xrange(1024):             try:                 n, v, t = wr.EnumValue(aKey, i)                 print i, n, v, t             except EnvironmentError:                 print "You have", i, "tasks starting at logon"                 break     finally:         wr.CloseKey(aKey)     print "*** Writing to", targ, "***"     aKey = wr.OpenKey(aReg, targ, 0, wr.KEY_WRITE)     try:         try:             wr.SetValueEx(aKey, "MyNewKey", 0, REG_SZ, r"c:\winnt\explorer.exe")         except EnvironmentError:             print "Encountered problems writing into the Registry..."             raise     finally:         CloseKey(aKey) finally:     CloseKey(aReg)

Discussion

The Windows registry holds a wealth of crucial system administration data, and the Python standard module _winreg makes it feasible to read and alter data held in the registry. One of the items held in the Windows registry is a list of tasks to be run at login (in addition to other lists held elsewhere, such as the user-specific Startup folder that this recipe does not deal with).

This recipe shows how to examine the registry list of login tasks, and how to add a task to the list so it is run at login. (This recipe assumes you have Explorer installed at the specific location c:\winnt. If you have it installed elsewhere, edit the recipe accordingly.)

If you want to remove the specific key added by this recipe, you can use the following simple script:

import _winreg as wr aReg = wr.ConnectRegistry(None, wr.HKEY_LOCAL_MACHINE) targ = r'SOFTWARE\Microsoft\Windows\CurrentVersion\Run' aKey = wr.OpenKey(aReg, targ, 0, wr.KEY_WRITE) wr.DeleteValue(aKey, "MyNewKey") wr.CloseKey(aKey) wr.CloseKey(aReg)

The TRy/finally constructs used in the recipe are far more robust than the simple sequence of function calls used in this latest snippet, since they ensure that everything is closed correctly regardless of whether the intervening calls succeed or fail. This care and prudence are strongly advisable for scripts that are meant be run in production, particularly for system-administration scripts that must generally run with administrator privileges. Such scripts therefore might harm a system's setup if they don't clean up after themselves properly. However, you can omit the try/finally when you know the calls will succeed or don't care what happens if they fail. In this case, if you have successfully added a task with the recipe's script, the calls in this simple cleanup script should work just fine.

See Also

Documentation for the standard module _winreg in the Library Reference; Windows API documentation available from Microsoft (http://msdn.microsoft.com); information on what is where in the registry tends to be spread information among many sources, but for some useful collections of such information, see http://www.winguides.com/registry and http://www.activewin.com/tips/reg/index.shtml.



Python Cookbook
Python Cookbook
ISBN: 0596007973
EAN: 2147483647
Year: 2004
Pages: 420

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net