Why read this post?

  • Do you find that your devices are taking longer and longer to start up as time moves on? Unwanted startup programs are probably the culprit (unless you’ve got a virus!)
  • Here is a nice multi-function utility that can interrogate your startup items and scrub out the ones that are unwanted.

Download the files mentioned in this post from here

We’ve all been there on an end users device with people complaining that their machine takes forever to start up. Nine times out of ten you will find that this is because they have a raft of unnecessary startup items not only starting up every time the device boots up, but constantly running all the time and potentially hogging valuable resources.

This was brought home to me recently when I rebuilt my laptop (after an annoying Windows wobbly was thrown… don’t ask!) and found that after installing only a fairly lean set of programs and drivers that I already had a load of arguably mostly useless stuff in my startup programs:

SunJavaUpdateSched (Java Updater)
QuickTime Task (Quicktime Task)
iTunesHelper (iTunes Helper)
Adobe Reader Speed Launcher (Adobe Reader Speed Launcher)
Adobe ARM (Adobe Reader and Acrobat Manager)
NvCplDaemon (Nvidia System Tray)
NvMediaCenter (Nvidia Multimedia Center)
NVHotkey (Nvidia Hotkeys)
OEM04Mon.exe (Webcam Utility)
CentraStage (CentraStage System Tray)
AVG_TRAY (AVG System Tray
BCSSync (Office 2010 Web Synchronise)

I decided that out of twelve startup items that only three were desirable to keep (CentraStage (obviously!), AVG_TRAY, BCSSync). The rest were just junk that I could do without.

This is fair enough to delete these on one device but on hundreds/thousands?!?… not easy. The main issue is that half of them get replaced with every software update meaning that it is a constant battle to keep these programs under control.

This was my call to arms…

I figured what I needed was something that was:

  • Able to tell me what was starting up and give me a clue to what it related to.
  • Able to remove these items on a regular basis (scheduled) to keep them under control.
  • Configurable to allow me to choose what items I wanted to remove in a standard format.
  • Compatible with both 32/64-Bit O/S types.

Here’s what I came up with:

StartupPrograms.exe

This can be run in two ways:

  • With no command line parameters it will return an output to the StdOut that looks something like the following:

Registry Root: HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
——————————————————————————–
[Startup 1]
ValueName=CentraStage
ValueData=C:\Program Files\CentraStage\Gui.exe
[Startup 2]
ValueName=AVG_TRAY
ValueData=C:\Program Files\AVG\AVG10\avgtray.exe
[Startup 3]
ValueName=BCSSync
ValueData=”C:\Program Files\Microsoft Office\Office14\BCSSync.exe” /DelayServices

The ValueName is the value as stored in the registry under the key displayed in the Registry Root part of the output. The ValueData is the data contained within the value. The ValueData is not required for the removal part of the operation but is there to aid understanding of what the program may be associated with.

The output  is in the format of an .ini file to make it easier to use with the second method of running:

  • With the /R command line switch and an associated .ini file (setup.ini) the executable will remove the programs contained within the .ini file from startup.
  • This isn’t like MSCONFIG where you can enable/disable programs. This will REMOVE the entries from the registry so you won’t be able to get them back so BE CAREFUL!
  • This will work on both 32/64-Bit registry locations (wow6432node) so you shouldn’t get any problems with 32/64-Bit programs registering in different locations.
  • This does NOT remove any registry entries for individual users as it’s much more complicated to enumerate all the different registry paths for this and I figured it probably wasn’t worth all the effort!
  • Don’t worry if the program specified in the .ini file is not present on the target device, it will just be ignored. This allows you to make a “catch-all” .ini file for all possible programs.

Here is an example of the .ini file (setup.ini) that I used on my laptop:

[Java Updater]
ValueName=SunJavaUpdateSched
[Quicktime Task]
ValueName=QuickTime Task
[iTunes Helper]
ValueName=iTunesHelper
[Adobe Reader Speed Launcher]
ValueName=Adobe Reader Speed Launcher
[Adobe Reader and Acrobat Manager]
ValueName=Adobe ARM
[Nvidia System Tray]
ValueName=NvCplDaemon
[Nvidia Multimedia Center]
ValueName=NvMediaCenter
[Nvidia Hotkeys]
ValueName=NVHotkey
[Webcam Utility]
ValueName=OEM04Mon.exe

The section names (surrounded by []) are friendly names for the programs and can be whatever you want (although they must be unique or the script will get confused and take the value of the first one encountered each time). They don’t relate to the removal but are displayed in the output of the job. I have chosen to omit the ValueData key as returned by the first run method but it’s up to you if you leave it in for clarity. It has no bearing on the removal. It is important that the ValueName is the same as what is in the registry so copy/paste is preferable to avoid typos.

So to recap:

Function: Return startup items to StdOut but do not remove

Required files: StartupPrograms.exe

Command:

@ECHO

PUSHD %~dp0

StartupPrograms.exe

Function: Remove all startup items from 32/64-Bit registry paths as specified in setup.ini file

Required files: StartupPrograms.exe, setup.ini

Command:

@ECHO

PUSHD %~dp0

StartupPrograms.exe /R