プログラムが起動したときに、別のプログラムを起動する方法

私の環境では、Escape From Tarkov を起動したときに Logicool ゲームソフトウェアが勝手に終了してしまいます。
恐らく、EFT のバグではなく、私の PC のレジストリか何かが壊れているため、そういった症状が出ているのでしょう。(以前は Sound Blaster が終了していました。)
EFT のバグであるかどうかはどうでもよくて、私はマウスボタンに便利な機能 (特に'Discard') を設定しているので、Logicool が終了してしまうと、Raid 中に Discard できなくなるので、とてもフラストレーションを感じます。
この対策として、下記手順のように設定すると、Escape From Tarkov を起動したときに Logicool ゲームソフトウェアを自動で起動するようにできました。

以下の URL を参考にしました。

superuser.com

手順は以下の通りです。

  1. ローカルセキュリティポリシーで、プロセス監査の追跡を有効にする。
  2. タスクスケジューラで、プログラム起動時に別のプログラムを起動するタスクを作成する。

上記手順は簡単に見えますが、実際には複雑で上級者向けの内容となります。
この記事はそのための備忘録でもあります。

全文を読んでから実行することを推奨します。

問題が発生しても、私は責任を取れません。

手順を説明します。

1. ローカルセキュリティポリシーで、プロセス監査の追跡を有効にする。

この手順で行いたいことは、アプリケーションを起動するたびにプロセスを取得できるようにすることです。

恐らく多くのひとが、手順で躓きます。
理由は、Windows 10 Home では、ローカルセキュリティポリシーを開くことができないためです。

試しに、[Windows] + [R] を押し、secpol.msc と入力し実行してみてください。

次のウィンドウが起動しましたか? f:id:aki0018:20200702232546p:plain

起動に失敗したひとは、1-1.の手順に進んでください。

起動に成功したひとは、1-2.の手順に進んでください。

1-1. ローカルグループポリシーエディターを有効にする

起動に失敗したひとは、「ローカルグループポリシーエディター」が有効になっていません。
「ローカルグループポリシーエディター」を有効にすると、「ローカルセキュリティポリシー」を起動できるようになります。
下記 URL を参考に「ローカルグループポリシーエディター」を有効にします。 www.japan-secure.com

 1.以下のBATファイルを作成します。

@echo off 
pushd "%~dp0" 

dir /b %SystemRoot%\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >List.txt 
dir /b %SystemRoot%\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientTools-Package~3*.mum >>List.txt 

for /f %%i in ('findstr /i . List.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i" 
pause

 2.BATファイルを [管理者として実行] します。

 3.再度、secpol.msc を実行します。

これで、「ローカルセキュリティポリシー」が起動できるようになりました。

余談ですが、「ローカルグループポリシーエディター」で Windows Update 関連の設定ができるようです。
Home 版では「ローカルグループポリシーエディター」が無効になっているため、Windows Update の自動更新の無効化ができないようになっています。

1-2. プロセス監査の追跡を有効にする

secpol.msc を起動後、下記の通りに設定します。

  1. セキュリティの設定 - ローカル ポリシー - 監査ポリシー - プロセス追跡の監査 をダブルクリック
  2. 「次の場合に監査する:」のチェックボックス[成功 (S)] のみにチェックを入れる
  3. [OK] をクリック

次のようになっていれば、問題ありません。 f:id:aki0018:20200703000024p:plain

これで、全てのアプリケーションを起動するたびに、イベントビューアーの Windows ログ - セキュリティ項目に、プロセス作成イベント「4688」が表示されるようになります。

2. タスクスケジューラで、プログラム起動時に別のプログラムを起動するタスクを作成する。

ここからは、より高度な設定になります。

タスクスケジューラは、タスクの実行をスケジューリングすることができる強力なツールです。 通常は、定時バックアップ等、定期的にタスクを実行したい場合に設定しますが、今回のような、あるイベントをトリガーとして、プログラムを起動することも可能です。

[Windows ボタン] を押し、「タスクスケジューラ」と入力して、タスクスケジューラを起動してください。

f:id:aki0018:20200703003506p:plain

右側の「タスクの作成」をクリックします。

2-1. イベントに基づいたタスクのトリガーを作成する

この手順では、慎重に操作し、設定の途中で [OKボタン] を押さないでください。XMLの設定以降、設定を編集したい場合は、この手順を最初から行う必要があります。 [OKボタン] を押すタイミングはこちらで指示します。

  1. 「全般」タブの「名前」に、作成するタスクの名前を設定します。
  2. 「トリガー」タブの「新規」ボタンを押して、「タスクの開始(G): 」は「イベント時」を選択します。
  3. 「設定」で「カスタム(U) 」を選択し、「新しいイベント フィルター」をクリックします。
  4. 次のように設定します。(全てマウス操作で選択してください) f:id:aki0018:20200703014527p:plain

  5. 次に [XML] タブで、「手動でクエリを編集する(Q)」にチェックを入れ、[はい] を選択します。 (この手順以降、「手動でクエリを編集する(Q)」のチェックを外すと設定が消えます。 イベントフィルターの編集は、クエリを直接編集するか、フィルターを再作成する必要があります。)

  6. クエリに追記するか、次のクエリをコピー&ペーストします。Data='xxxx.exe' でトリガーとしたいプログラムを指定できます。次の例では 「notepad.exe」 をトリガーに指定しています。
<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>

クエリの編集が完了したら [OK] をクリックします。その次に、「新しいトリガー」の [OK] ボタンをクリックします。

トリガーの設定が完了したら次のようになります。
(この画面の [OK] はまだ押さないでください。設定はまだ続きます。) f:id:aki0018:20200703022822p:plain

2-2. イベント取得後に起動するプログラムを指定する

2-1.で難しい手順は終わりました。この手順では、起動したいプログラムを指定するだけです。

  1. タスクの作成の「操作」タブで [新規] ボタンをクリックします。
  2. [操作] が「プログラムの開始」となっていることを確認し、設定 - [プログラム/スクリプト] にフルパスでプログラムを指定します。

プログラムを指定したら、[OK] をクリックします。
「タスクの作成」ダイアログの [OK] をクリックし、ダイアログを閉じます。

タスクスケジューラライブラリに、2-1.で設定した名前のタスクが表示されているはずです。
作成したタスクを選択し、画面右側の [選択した項目] - [実行] をクリックすれば、タスクが実行されます。
動作するか試してみてください。

最後に

完璧に動作しましたか?
問題なく動作したと思いますが、実は私の問題のケースでは、今回の設定は少し不適合があります。
私が抱えていた問題、それは Escape From Tarkov が起動したとき、Logicool ゲームソフトウェアが勝手に終了してしまうことでした。
私の環境では、Logicool は常駐すべきプログラムです。そして、EFT だけが、Logicool を異常終了させるとは限りません。
つまり、「EFT が起動すると Logicool が終了するので、Logicool を再起動する」は、正しい解決方法とはいえません。
この問題の解決方法は、すなわち、Logicool が終了したときのみ、Logicool を再起動させることが正しい解決アプローチなのです。

Logicool が終了した」トリガーを取得すれば、私の問題は解決できるはずです。