vb.net で PC をシャットダウンするのは簡単です。
Process.Start("shutdown", "-s -t 00")
ユーザーがPCをロックしていない限り、上記は失敗します。
vb.netでこれを回避するにはどうすればよいですか? ロックされた PC をシャットダウンするにはどうすればよいですか?
プログラムはローカルで実行されます。
System.Diagnostics.Process.Start("shutdown", "-s -f -t 00")
これにより、サイレントに 00ms でシャットダウンが強制されます。各プロセスを呼び出す必要があるコードは冗長です。上記のコードを使用してください。System.Imports.IO
上部でa を実行するだけで準備完了です。
後世のために:
Dim ms As ManagementScope = New ManagementScope("\\LocalHost")
ms.Options.EnablePrivileges = True
Dim oq As ObjectQuery = New ObjectQuery("SELECT * FROM Win32_OperatingSystem")
Dim query1 As ManagementObjectSearcher = New ManagementObjectSearcher(ms, oq)
Dim queryCollection1 As ManagementObjectCollection = query1.Get()
For Each mo As ManagementObject In queryCollection1
Dim ss As String() = {"5"}
mo.InvokeMethod("Win32Shutdown", ss)
Next
利用可能なフラグの詳細については、Google の「Win32Shutdown」を参照してください (上記の ss)。5 は、PC がロックされている場合の強制シャットダウンですが、shutdown /f よりも適切であり、再起動時にプログラムやサービスに問題が発生することはないようです。
P/Invoke ExitWindowsExを呼び出すことができます
そこに C# の例がありますが、変換できると確信しています。
シャットダウンを強制する「-f」フラグを探していると思います。
MS KB記事からの引用: コンピューターがロックされている場合、Shutdown.exe コマンドを -f オプションと共に実行すると、コンピューターをシャットダウンできます。
コンピューターを強制的にリモートでシャットダウンする方法を説明しているCodeProjectのこの記事を見て、その方法を理解してください。
名前空間を使用することSystem.Management
は、外部ツールを開始するよりも洗練されています。C# のコード例を次に示します。変換はかなり簡単です。
http://www.dreamincode.net/forums/topic/33948-how-to-shut-down-your-computer-in-c%23/