How to start a program when another one is started

I want a program to start each time another one is starting.

Here's an example: Each time I start Google Chrome, I would like iTunes to start at the same time.

Also, I want it to start when I click a link in my browser that starts a program (like "view in iTunes on the iTune website).

I do not want to have to do with a .bat file.

I am running on Windows 7


Solution 1:

You could probably set up specific pairs of apps to run using the registry, and altering what deals with mimetypes. However another more generic way, and far more complex, is to use the Task Scheduler. The task scheduler can start an app based various types of triggers, including Event Log entries.

So all we need is to ensure an event is created whenever an application starts, and then create a scheduled task to start whenever the event is logged.

Enable 'application start' logging

  1. Start and enter secpol.msc into the Run box
  2. Navigate to Local Policies/Audit Policy
  3. Double Click Audit process tracking and enable Success

Now, if you start any application, if you look in Event Viewer / Security Log you will see a Process Creation event 4688 each time an application is started.

Create scheduled task based on trigger

  1. Open Task Scheduler and create a new task
  2. On the General Tab, give the task a name
  3. On the Triggers tab, create a new trigger, and choose On an event as the trigger
  4. Choose Custom, and click Edit Event Filter
  5. Change the Filter settings as follows:

Task filter

Now Switch to the XML tab, and enable edit query manually

You will see the following

<QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">
      *[System[Provider[@Name='Microsoft-Windows-Security-Auditing'] and Task = 13312 and (band(Keywords,9007199254740992)) and (EventID=4688)]] 
    </Select>
  </Query>
</QueryList>

Now you just need to add the application you want to cause the trigger. For example, this one uses notepad.exe as the trigger:

<QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">
     *[System[Provider[@Name='Microsoft-Windows-Security-Auditing'] and Task = 13312 and (band(Keywords,9007199254740992)) and (EventID=4688)]] 
   and 
     *[EventData[Data[@Name='NewProcessName'] and (Data='C:\Windows\System32\notepad.exe')]]
    </Select>
  </Query>
</QueryList>

Click Ok for this, then Ok to close the trigger dialog box.

Now choose the Action tab, and create a new action, that is Start a Program, and browse to the app you want to start along with the trigger application.

Solution 2:

I am sure that Paul's answer above might work for most of people, however for some reason I could not get it to work with my program.

When specifying the path for Notepad.exe, the Task was created successfully; when I changed the path to the one of the program I was intending to use, I always got An event filter for a trigger is not valid error when pressing OK at the end of the task creation. Consider that the event filter looks exactly like Paul's (I generated it myself following his procedure) with the exception that my program sitted in the Program Files (x86) folder.

I eventually solved my problem by installing an external software, Bill's Process Manager. Kudos to this StackExchange answer for it.