5

アプリケーションがあります。アプリケーションが15分以内に使用されない場合は、他のすべてのアプリケーションを閉じる(強制的に閉じる)必要があり、タイマーが再開します。私はこれを行ってWindows7をクラッシュさせたくありません。これまでのところ、私は次のものを持っています:

Process me = Process.GetCurrentProcess();
foreach (Process p in Process.GetProcesses())
{
    if (p.Id != me.Id 
        && p.ProcessName != "winlogon.exe" 
        && p.ProcessName != "explorer.exe"
        && p.ProcessName != "System Idle Process"
        && p.ProcessName != "taskmgr.exe"
        && p.ProcessName != "spoolsv.exe"
        && p.ProcessName != "csrss.exe"
        && p.ProcessName != "smss.exe"
        && p.ProcessName != "svchost.exe "
        && p.ProcessName != "services.exe"
    )
    {
        p.Kill();
    }
}

悲しいことにウィンドウが死ぬ(ブルースクリーン)。アクティブに使用するためにすべてのプロセスを閉じて、Windowsが存続する可能性がある方法はありますか?

4

4 に答える 4

4

まず、公共の PC で自動ログオンを設定します。

その後、プログラムを再起動するだけです。

定常状態をセットアップするか、 Deep FreezeSystem SafeTime Freezeなどの製品を使用すると、ボーナス ポイントが得られます。これらの製品には、非アクティブな状態が一定期間続くと、コンピューターを再起動してクリーンな状態にするオプションさえあります...

于 2011-02-22T01:30:26.170 に答える
3

ここで安全を確保する最も簡単な方法は、アプリケーションの起動時に存在していたプロセスのリストを保持し、それらを強制終了から除外することです。ただし、アプリケーションがいつ起動するかによっては (たとえば、システム起動の一部ではない場合)、一部のアプリケーションが見過ごされる可能性があります。利点としては、デバイス (マウスやキーボード ハンドラーなど) のユーザー モード フックを実行し続けることができるため、すべてを強制終了した後でもシステムを使用できます。

メッセージのブロードキャストを試すこともできますがWM_CLOSE、Windows がそれをブロックしても驚かないでしょう。ウィンドウが表示されているプロセスにのみ影響しますが、それで十分な場合があります。

3 番目のオプションは、ログオフを強制するExitWindowsExことです。これにより、OS がすべてを閉じます。もちろん、これにより独自のアプリケーションも閉じられ、ユーザーは再度ログオンする必要があります。自動ログインが設定されている場合は、すぐにログインし直すことがあります。

于 2011-02-21T22:30:34.763 に答える
2
if (p.Id != me.Id
    && !p.ProcessName.ToLower().StartsWith("winlogon")
    && !p.ProcessName.ToLower().StartsWith("system idle process")
    && !p.ProcessName.ToLower().StartsWith("taskmgr")
    && !p.ProcessName.ToLower().StartsWith("spoolsv")
    && !p.ProcessName.ToLower().StartsWith("csrss")
    && !p.ProcessName.ToLower().StartsWith("smss")
    && !p.ProcessName.ToLower().StartsWith("svchost")
    && !p.ProcessName.ToLower().StartsWith("services")
    && !p.ProcessName.ToLower().StartsWith("lsass")
)
{
    if (p.MainWindowHandle != IntPtr.Zero)
    {
        p.Kill();
    }                          
}

これは機能しているようです。

于 2011-02-21T23:38:04.827 に答える
1

ウィンドウが機能するために必要な重要なプロセスを強制終了しているようです。それらを強制終了すると、Windows は回復できず (すでに気付いているように)、再起動する必要があります。

于 2011-02-21T22:20:16.440 に答える