web-dev-qa-db-ja.com

プログラムの起動を遅らせたいが、タスクスケジューラでそれが見つからない

ログイン時に読み込まれる特定のプログラムの起動を遅らせようとしています。 この質問 の回答に従って、タスクスケジューラを使用して実行できるはずです。問題は、どこにもリストされているプログラムが見つからないことです。調べる必要がある特定のペインはありますか?プログラムはRazer Synapseなので、MicrosoftフォルダーやWestern Digitalフォルダーにあるとは思いません。

screen shot of my task scheduler

タスクスケジューラにない場合、起動時に遅延させることができる別の方法はありますか?

好奇心から、Windowsの起動時にプログラムを実行する方法はいくつありますか?

7
Celeritas

リストされているプログラムがどこにも見つかりません。

起動時にプログラムを実行するために使用できる場所はたくさんあります。探しているプログラムが見つかるまで、すべてチェックする必要があります。

起動場所を簡単に確認できるプログラムがいくつかあります。

  1. msconfig([スタートアップ]タブ):

    enter image description here

  2. Autorunsfrom SysInternals

    enter image description here

  3. WhatInStartupNirSoft から:

    enter image description here

  4. WinPatrol

    enter image description here

    注意:

    • WinPatrolを使用すると、プログラムを「スタートアッププログラム」から「遅延スタート」に移動できます。
    • この場合、遅延時間を指定できます。


    enter image description here


Windowsの起動時にプログラムを実行する方法はいくつありますか?

プログラムを開始できる場所は少なくとも17か所あります。下記参照。


Windowsプログラムの自動起動場所

コンピューターの電源を入れると、次の自動起動の場所が次の順序で処理されます。

  1. Windowsブートデバイスドライバー

    • これらのドライバは、ストレージデバイスなどのハードウェアの適切な動作に必要であるため、最初にロードされます。
    • ブートデバイスドライバーは次のキーの下にあり、開始値は0です。


    レジストリキー:

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services
    

    Windowsはさまざまなタスクを実行し、Winlogonプロセスを開始します。 Winlogonは、最終的に、自動起動に設定されているサービスとドライバーを読み込むサービスコントロールマネージャーを起動します。

  2. Windows自動起動サービスとドライバー

    • サービスコントロールマネージャー(SCM)プロセス(\ Windows\System32\services.exe)は、開始値2でマークされたサービスまたはドライバーを起動します。


    レジストリキー:

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services
    
  3. RunServicesOnce

    • このキーは、コンピューターの起動時にサービスを開始するように設計されています。
    • これらのエントリは、ログオン後も実行を継続できますが、HKEY_LOCAL_MACHINE ...\RunOnceレジストリがプログラムのロードを開始する前に完了する必要があります。


    レジストリキー:

    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
    
  4. RunServices

    • このキーは、サービスも開始するように設計されています。
    • これらのエントリは、ログオン後も実行を継続できますが、HKEY_LOCAL_MACHINE ...\RunOnceレジストリがプログラムのロードを開始する前に完了する必要があります。


    レジストリキー:

    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices
    

    Windowsログオンプロンプトが画面に表示されます。ユーザーがログインした後、残りのキーを続行します。

  5. 通知

    • このキーは、特定のイベントが発生したときに実行されるプログラムを追加するために使用されます。
    • イベントには、ログオン、ログオフ、起動、シャットダウン、startscreensaver、stopscreensaverなどがあります。
    • Winlogon.exeがリストされているようなイベントを生成すると、WindowsはNotifyレジストリキーでDLLがこのイベントを処理します。
    • マルウェアは、この方法を使用して、ユーザーがコンピューターにログオンしたときに自身をロードすることが知られています。このような方法でロードすると、マルウェアプログラムは、停止が容易ではない方法でロードされます。


    レジストリキー:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify
    
  6. UserInitキー

    • このキーは、ユーザーがWindowsにログインした直後に起動するプログラムを指定します。
    • このキーのデフォルトのプログラムはC:\ windows\system32\userinit.exeです。 Userinit.exeは、ユーザー名のプロファイル、フォント、色などを復元するプログラムです。
    • プログラムをコンマで区切ることにより、このキーから起動するプログラムをさらに追加できます。例えば:

      HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit = C:\ windows\system32\userinit.exe、c:\ windows\badprogram.exe。

    これにより、ログイン時に両方のプログラムが起動し、トロイの木馬、ハイジャッカー、スパイウェアが起動する一般的な場所になります。レジストリキー:

    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
    
  7. シェル値

    • この値には、Userinit.exeが起動するコンマ区切り値のリストが含まれています。
    • WindowsのデフォルトのシェルはExplorer.exeですが、正当な置換が行われています。 userinit.exeがシェルを起動すると、最初にHKEY_CURRENT_USERにあるシェル値が起動されます。この値が存在しない場合は、HKEY_LOCAL_MACHINEにある値を起動します。


    レジストリキー:

    HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\\Shell
      HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\\Shell
    

    自動開始の残りの場所が処理されます。

  8. RunOnceローカルマシンキー

    • これらのキーは、主にセットアッププログラムで使用するように設計されています。
    • これらのキーのエントリは一度起動すると、キーから削除されます。
    • キーの値の前に感嘆符がある場合、エントリはプログラムが完了するまで削除されません。それ以外の場合は、プログラムが実行される前に削除されます。感嘆符が使用されておらず、このキーで参照されているプログラムの完了に失敗した場合、すでに削除されているため、これは再度実行されないため、これは重要です。
    • このキーのすべてのエントリは、未定義の順序で同期的に開始されます。
    • このため、このキーのすべてのプログラムは、HKEY_LOCAL_MACHINE ...\Run、HKEY_CURRENT_USER ...\Run、HKEY_CURRENT_USER ...\RunOnce、およびスタートアップフォルダーを読み込む前に終了する必要があります。
    • RunOnceキーは、Windows 2000およびWindows XPセーフモードでは無視されます。RunOnceキーは、Windows NT 3.51ではサポートされていません。


    レジストリキー:

    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce
    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnceEx
    
  9. 実行

    • これらは、自動起動をインストールするプログラムの最も一般的な起動場所です。
    • デフォルトでは、これらのキーはセーフモードでは実行されません。これらのキーの値の前にアスタリスク*を付けると、セーフモードで実行されます。


    レジストリキー:

    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
    
  10. All Users Startup Folder

    • Windows XP、2000、およびNTの場合、このフォルダは、このコンピュータにログインするすべてのユーザーに対して自動起動する必要があるプログラムに使用されます。


    通常は次の場所にあります:

    • Windows XP C:\Documents and Settings\All Users\Start Menu\Programs\Startup

    • Windows NT C:\wont\Profiles\All Users\Start Menu\Programs\Startup

    • Windows 2000 C:\Documents and Settings\All Users\Start Menu\Programs\Startup

  11. ユーザープロファイルスタートアップフォルダー

    • このフォルダは、ログインした特定のユーザーに対して実行されます。


    このフォルダは通常、次の場所にあります:

    • 勝利9X、ME c:\windows\start menu\programs\startup
    • Windows XP C:\Documents and Settings\LoginName\Start Menu\Programs\Startup
  12. RunOnce現在のユーザーキー

    • これらのキーは、主にセットアッププログラムで使用するように設計されています。
    • これらのキーのエントリは一度起動すると、キーから削除されます。
    • キーの値の前に感嘆符がある場合、エントリはプログラムが完了するまで削除されません。それ以外の場合は、プログラムが実行される前に削除されます。感嘆符が使用されておらず、このキーで参照されているプログラムの完了に失敗した場合、すでに削除されているため、これは再度実行されないため、これは重要です。
    • Windows 2000およびWindows XPセーフモードでは、RunOnceキーは無視されます。
    • RunOnceキーは、Windows NT 3.51ではサポートされていません。


    レジストリキー:

    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
    
  13. Explorer Run

    • これらのキーは通常、コンピューターまたはユーザーに設定されたポリシーの一部としてプログラムを読み込むために使用されます。


    レジストリキー:

    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
    
  14. ロードキー

    • このキーは一般的に使用されなくなりましたが、プログラムの自動起動に使用できます。


    レジストリキー:

    HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\load
    
  15. AppInit_DLLs

    • この値は、AppInit_DLLsレジストリ値を介してロードされるファイルに対応しています。
    • AppInit_DLLsレジストリ値には、user32.dllが読み込まれるときに読み込まれるdllのリストが含まれています。
    • ほとんどのWindows実行可能ファイルはuser32.dllを使用するため、AppInit_DLLsレジストリキーにリストされているすべてのDLLもロードされます。これにより、DLL複数のプロセス内でロードされるため、システムを不安定にすることなく停止できないプロセスもあります。
    • User32.dllファイルは、ログオン時にシステムによって自動的に開始されるプロセスでも使用されます。これは、AppInit_DLLs値でロードされたファイルがWindowsスタートアップルーチンの非常に早い段階でロードされ、システムにアクセスする前にDLLがそれ自体を非表示または保護することを許可します。


    レジストリキー:

    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows
    
  16. ShellServiceObjectDelayLoad

    • このレジストリ値には、Runキーと同様の方法で値が含まれています。
    • 違いは、ファイル自体を指すのではなく、使用されている特定のDLLファイルに関する情報を含むCLSIDのInProcServerを指すことです。
    • このキーの下のファイルは、コンピューターの起動時にExplorer.exeによって自動的に読み込まれます。 Explorer.exeはコンピューターのシェルであるため、常に起動し、常にこのキーの下のファイルを読み込みます。したがって、これらのファイルは、人間の介入が発生する前の起動プロセスの早い段階でロードされます。


    レジストリキー:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ShellServiceObjectDelayLoad
    
  17. SharedTaskScheduler

    • このセクションは、XP、NT、2000マシンのSharedTaskSchedulerレジストリ値を介してロードされるファイルに対応しています。
    • このレジストリ値のエントリは、Windowsの起動時に自動的に実行されます。


    レジストリキー:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SharedTaskScheduler
    

以下は、起動時にプログラムが自動起動できるファイルです。

  1. c:\ autoexec.bat
  2. c:\ config.sys
  3. windir\wininit.ini-通常、セットアッププログラムがファイルを1回実行してから削除するために使用します。
  4. windir\winstart.bat
  5. windir\win.ini-[windows] "load"
  6. windir\win.ini-[windows]「実行」
  7. windir\system.ini-[ブート]「シェル」
  8. windir\system.ini-[ブート] "scrnsave.exe"
  9. windir\dosstart.bat-シャットダウンメニューで[MS-DOSモードで再起動]を選択すると、Win95または98で使用されます。
  10. windir\system\autoexec.nt
  11. windir\system\config.nt

ソース Windowsプログラムの自動起動場所


免責事項

私はSysInternals、Nirsoft、WinPatrolとは何の関係もありません。ソフトウェアのエンドユーザーにすぎません。

16
DavidPostill

プログラムがタスクスケジューラで使用できない場合は、Registryまたはstartupフォルダーにあるか、バックグラウンドサービスとして実行されている可能性があります。

起動フォルダの場所 すべてのユーザー 以下のとおりであります:
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp

起動フォルダの場所 現在の使用者 以下のとおりであります:
C:\Users\Username\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

スタートアップレジストリの場所 すべてのユーザー 以下のとおりであります:
HKLM\Software\Microsoft\Windows\CurrentVersion\Run
HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce

スタートアップレジストリの場所 現在の使用者 以下のとおりであります:
HKCU\Software\Microsoft\Windows\CurrentVersion\Run
HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce

プログラム名を見つけたら、安全に無効にして、Task Schedulerで新しいタスクを作成し、必要に応じて遅延させることができます。

上記の場所にプログラムが見つからない場合は、サービスコンソールにある可能性があります。スタートボタンを押してservices.mscと入力すると、サービス管理コンソールが表示され、そこにプログラムが表示されます。

MicrosoftのSysInternalスイートから Autoruns をダウンロードして、たくさんのスタートアッププログラムを確認できます。

いくつかの「プログラム」には、非常に大きな問題があります。

実行するたびに、レジストリを設定またはタッチして\ Software\Microsoft\Windows\CurrentVersion\Runにエントリを追加します。これにより、次回の起動時にログインと同時に再実行され、そのようなことを無効にするオプションはありません。

私はそのようなやり方が嫌いですが、時にはそのようなプログラムを実行する必要があります(ドライバー関連)。

例として:バックグラウンドでプログラムが実行されていない(GUIがない)ドキュメント/ペーパーフラットスキャナーがまったく機能せず、ドライバーがインストールされるとそのプログラムがインストールされます(互換性がないため、申し訳ありません!一部の専門家は問題を回避する別の方法を考えます)...今では悪い部分、そのようなプログラムはそれをレジストリに入れますので、ログインするとすぐに実行され、今では最悪の部分ですが、レジストリエントリを削除するとこのようなプログラムが実行されていると、エントリが再度追加されます。

私はそれが常に実行されないようにするために非常に醜い回避策(自動タスクと手動タスクの混合)を持っています(ほとんどの日、このようなスキャナーを使用しない日もあり、多くの日、USBポートに接続していない日もあります)。 。2つまたは3つの処理を実行するスクリプトの実行に基づいています...そのプログラムを開始するために.lnkを起動し、2分間(プログラムが起動中にWindowsをフリーズさせる時間)待機/スリープを起動します。スクリプトは、そのようなプログラムが入力されるのを待ってから、スキャナーのフロントエンドGUIの.lnkを起動して、紙をスキャンできるようにします。完了したら、手動でProcessExplorerを使用して多くのプログラムを強制終了し、作成した.regを実行してレジストリからエントリを削除します。これにより、次回の起動時に実行されなくなります。

レジストリエントリを削除すると、そのようなプログラムは実行されていない(以前に強制終了した)ため、レジストリに追加できないため、次回の起動時にそれを起動するエントリ...削除するとすぐに強制終了するのを忘れた場合エントリ(F5キーを押してレジストリエントリを更新)が再作成されました。

その方法でそれを行うと、各起動で毎日2分を超える時間が得られます。

では、どのようにしてツールが醜い(最悪のWordを言っていない)方法で対処できるのでしょうか。プログラムは、実行されるたびにだけでなく、エントリが削除されるとすぐに、プログラムを自動的に追加して起動します。

ツールを使用していた(SysInternalsのRegMonと非常に似ているが、GUIが異なるため、監視されている同じレジストリ "フォルダー"で1つのイベントから次のイベントまでにかかった時間がわかる)、エントリを削除したときからそのような醜いプログラムがそれを再作成するまで、0.00001秒と0.0002秒(2ミリ秒未満)だけを渡すので、そのようなプログラムはレジストリへのフックを使用して変更を監視する必要があります(実際、それを持っているデバッガは、 )。

では、レジストリを監視するプログラムを実行して、それがない場合にスタートアップリストに自分自身を追加する方法はありますか.

私はもう1つ試しました(あなたが思うほど愚かではなく、それは単なるテストです)、エントリの名前を変更(削除ではなく)して、何が起こるかを確認します...エントリの名前がそのようなプログラムが望むものに戻されます。

そのようなプログラムが名前付きの「X」の「削除」のみを監視する場合、名前を変更したものを削除する前に名前を変更することに基づく「トリック」があります。この場合、それは機能しません...プログラムは、エントリに対して行われたすべてを監視し、それを必要なものに戻します...したがって、プログラムが機能している間、他のオプションはありません...再実行されます次回の起動時、強制終了後にレジストリキーが削除されない限り。

また最悪です...ドライバーの更新により、最悪、最悪の事態が発生します...このようなタスクを開始した後は殺せません...非常に奇妙なことをするので、「システム」と呼ばれるタスクを殺さない限り(はいメインウィンドウタスク)私はそれを殺すことはできませんが、そのようなタスクを殺すことは明らかに非常に美しいBSODになります。

解決策(まったく機能しなかった):USBスキャナーを取り外し、ドライバー、スキャナーアプリケーション、およびそれに関連するすべてのものをアンインストールし、デバイスをUSBリストから削除して、使用されているすべてのファイルを削除するように指示します。CCLeanerを使用して無効なレジストリエントリを削除します。 ...メインプログラムはバックグラウンドで実行されているので、そのタスクを強制終了することはできません。レジストリに起動エントリが含まれることを回避できます。セーフモードで再起動します(プログラムは、セキュアブートのためにレジストリに自己を追加します)。解決策ではなく、プログラムが再度実行されます。

また、私は1つの大砲の解決策を試しました...次の起動時にそのようなファイルが削除されるようにツールを使用しましたが、次の起動は言った:ファイルは削除できません、それは使用中です。

ドライバーの最後の更新は、それが実行されないようにするために多くの障壁を課しました...それで、私は「マスター」解決策(私がカトリックでないなら)に行き、スキャナーを持って製造業者に行き、それを頭の上で壊しますそのような「ドライバー」を実行する方法の責任の...私はカトリックなので...私は他の「マスター」ソリューションを行います...いいえ、フォーマットしません... Linuxライブを取得し、Linuxから編集しますWindowsシステムのパーティションとプログラムを「削除」すると、次の起動時にプログラムを実行できなくなります... HDD上の+20の場所を削除するのを忘れないでください...覚えておいてください。トロイの木馬ではなく、マルウェアでもありません...それは、非常によく知られた製造元からのかなり古いスキャナー(2文字の略語)のドライバーです...そして、Windowsを起動し、レジストリをクリーンアップします...スキャナーをもう一度コンピューターに差し込みます...差し込んでから、ドライバーを回避するオプションなしで自動インストールします... Windowsがそのようなドライバーの最新バージョンをダウンロードしたため(インターネット接続がない場合)、したがって、最後の1つ(テスト済み)をインストールし、同じ問題を繰り返します...そして同じ解決策... Linuxを使用してすべてのファイルを削除します。

レジストリのセキュリティを編集するツールがあることは知っていますが、ロックされたエントリを変更することはできません。\ Software\Microsoft\Windows\CurrentVersion\Runのセキュリティを完全に変更することは非常に危険です。 ..レジストリを編集するそのようなプログラムはシステムアカウントで実行されています...管理者よりも多くの特権...それはすべてのセキュリティをジャンプすることができます。

本当に、それは私がそれを取り除くために私が見つけた最悪の最悪のプログラムです...ウイルス、トロイの木馬、マルウェアなどよりはるかに...そしてそれはスキャナーのための「ドライバー」です。

起動ごとに実行させない理由:起動時に、起動時に実行するか、起動後に手動で実行するかに関係なく、PCがフリーズしているように見えるのに2分強かかります...そのような2分で何もしない、画面の更新なし、マウスポインターの移動なしなど.

TWAIN=互換性のあるUSBスキャナーがあります。他のスキャナーは、庭の岩を砕くためだけに使用します!私が苦しんでいるものをだれにも苦しませることはできません...そしてもちろん、私は何と言っても、その製造元から再び何も購入しません。

まあ、それは非常に極端なケースだと言った...認めざるを得ない、私は起動時に実行される傾向のある多くのプログラムを使用する...それらの多くはログオン時に自動実行しないオプションを持っているが、他の人はそのようなオプションを持っていません...それらのいずれかがレジストリをロックするか、レジストリに再追加します...しかし、それらをいくつか起動し、起動した後、それらをスタートアップレジストリエントリに追加します。

そのようなもののために、私は独自の起動スクリプトを持っています:プログラムの.lnkを起動し、数分のスリープを(それらがレジストリに再度追加されるのに十分なほど)実行し、.regを起動してそのようなエントリを削除します...そして出来上がり、次回の起動時に再度実行されることはありません。

しかし、それらの1つは、終了時に自分で再度追加するため、非常に異なるアプローチを使用する必要があります。私のスクリプトは、/ waitを使用してプログラムを起動します(startを使用して起動します)。ただし、.lnkではなくプログラムを起動してください。 ...その後、スクリプトはプログラムが終了するまで待機/スリープ状態になり、スクリプトは続行され、レジストリエントリが削除されます。

もう1つはかなりトリッキーです...タスクマネージャーでシャットダウンタスクが必要です...それが起動すると待機なしで別のプロセスを起動するため...私のスクリプト(/ wait付き)はメインプログラムが終了するまで待機するだけです(数ミリ秒)ですが、起動するメインのものではありません...シャットダウンスクリプトでは、プログラムを強制終了してからレジストリを削除します。

言い換えれば、レジストリがロックされていない場合...私の一番のフェイルプルーフソリューションは、シャットダウン時に実行する独自のスクリプト(ブラックリストのようなもの)を使用することです。これにより、関連するプログラムが強制終了され、レジストリキーが削除されます次の起動時に実行したくありません。

そうすれば、すべてのブーツではなく、必要なときにだけプログラムを起動できます。

副作用:それらの一部は昇格された/管理者権限で実行する必要があります...そしてACMを無効にしたくないので、それぞれに対してOKを押す必要があります...ブート時にそれらを許可すると、それらは必要なく実行されますそのような確認。

M $が別の方法で実装されてうれしいです...昇格された権限が必要な場合は、それを要求し、ユーザーに通知します(今後は何度も尋ねないでください)。また、.lnkを編集するときも同様です。昇格した権利が必要であることを伝える/ runas admin ...別のオプション(質問しないでください)を有効にし、昇格したときに尋ねるようにユーザーに尋ねる...トラップすることはできず、実際のユーザーだけがアクティブにすることができます...等.

それまで、自分でレジストリに配置するアプリを実行する必要がある場合は、RegMonを使用して、アプリが次の起動時に自動実行するエントリを配置できる+8の場所をすべて監視します...わかりませんフォルダーに対しても、スケジューラに対しても同様のことができるフリーウェア...非常に煩わしいものを除いて、変更の確認を求めます...一部のアプリを失敗させるもの(タイムアウトメッセージ)。

残りの人が知って、開発者がそれを見て、実際のレジストリの自動実行エントリ、ディレクトリ、スケジュールタスクをロックするための素晴らしいFreeWareツールを作成できるように、私はこのすべての情報を残しますが、アプリに彼らが持っていたと考えさせますサンドボックスツールのように変更しました。次に、どの変更を希望するかをユーザーに提示し、許可されているかどうかをマーク/チェックできるようにします。これにより、次回の起動は、各アプリではなくユーザーが望むとおりになります。

0
claudio