
一部の画面でメモリ リークが発生しているため、ユーザーが終了してもプログラムが正常に終了しません。問題は、これが通常のログオフ手順をブロックすることです。ログアウトを選択すると、いくつかのプロセスが消えますが、ユーザーは実際にはログオフしません。
プログラムを修正できないので、ログオフ時に実行されるスクリプトを使用してプロセスを強制終了しようと思いました。スクリプトをダブルクリックして実行するとプロセスが強制終了することを確認し、gpedit で自分のマシンの [Windows 設定] -> [スクリプト] -> [ログオフ] にスクリプトを追加しました。
残念ながら、ログオフ スクリプトはすべてのプロセスが終了するまで実行されないため、実行されません。
ログオフ スクリプトをプロセスの早い段階で実行する方法はありますか? または、この問題に対するより良いアプローチはありますか?
答え1
HKEY_CURRENT_USER\Control Panel\Desktop の AutoEndTasks のレジストリ設定を 1 に設定してみましたか? それが機能する場合は、スクリプトは必要ありません。
答え2
次のようなプログラムを使ってログオフすることもできます。http://www.karenware.com/powertools/ptstopper.aspログオフ前にスクリプトを実行します。
答え3
これをスクリプトの最後に追加します
Set strComputer = "."
Set OpSysSet = GetObject("winmgmts:{(Shutdown)}//" & strComputer & "/root/cimv2").ExecQuery("select * from Win32_OperatingSystem where Primary=true")
for each OpSys in OpSysSet
OpSys.Win32Shutdown 0
next
WScript.Quit(0)
通常のログオフの代わりにこのスクリプトを使用するようにします。
現時点では、プロセスが終了する前にスクリプトを実行する方法がわかりませんが、これが機能しない場合は引き続き調べることができます。また、テストする機会はありませんでしたが、これはコマンドの正しい構文のはずです。調整が必要な場合はお知らせください。
答え4
ユーザーがログアウトしても完全にログアウトしないという問題を抱えているというのは、ちょっとおかしいと思います。そのため、「ログアウト時にこのプロセスを強制終了する」というスクリプトを記述しますが、ユーザーがログアウトしないためスクリプトを実行できません。ユーザーがログオフを完了したときではなく、ユーザーが「ログオフ」を押したときにスクリプトを開始する必要があります。
私は VBScript やログアウトの背後にある Windows API にはあまり精通していませんが、次のいずれかをお勧めします。
ユーザーが「ログオフ」を選択したときにスローされる別のイベント/トリガーがあるかどうかを確認し、その時点でスクリプトを起動します。これは言うほど簡単ではありませんが、申し訳ありませんが、実際に考えていたものを実現する最も明白な方法のように思えます。
ユーザーが [ログオフ] を選択した後に確実に終了するプロセスがあるかどうかを確認します (
explorer.exe
おそらく)。これは、強制終了しようとしているプロセスがシステムまたはセッションにとって重要でない場合 (または、強制終了スクリプトを関連付けるプロセスがシステムにとって重要である場合) のみ、適切な方法です。ユーザーがトレイ内の何かを閉じたという理由だけで、スクリプトによってプロセスが強制終了されることは望ましくありません。ログオフ スクリプトを用意するというアイデアはなかなか良いと思いますが、スタート メニューの [ログオフ] ボタンをこのスクリプトを起動するボタンに実際に置き換えることができるかどうかを調べることをお勧めします。コンピューター ラボで似たようなものを見たことがあります。しかし、デスクトップのカスタム [ログオフ] ボタンをクリックすることをユーザーに頼っていても、通常のログオフにアクセスできる場合、その筋肉の記憶は誰もがイライラするだけです。