Windows XPで任意のプログラムを終了させてからシャットダウンプログラムを実行する方法

このQ&Aのポイント
  • Windows XPで任意のプログラムを終了させる方法を教えてください
  • 質問者は「poweroff.vbs」を使用してタスクで自動シャットダウンしていますが、任意のプログラムを終了させてから実行したいと思っています。解決策はありますか?
  • 質問者はプログラムに詳しくないため、わかりやすい方法を教えてほしいとしています
回答を見る
  • ベストアンサー

任意のプログラムを終了させてからシャットダウンプログラムを走らせるには?

すいませんが、質問させていただきます。 現在Windows XPにて他のサイトにあった「poweroff.vbs」 --------- Set objSystemSet = GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}").InstancesOf("Win32_OperatingSystem") For Each objSystem In objSystemSet objSystem.Win32Shutdown 8 Next) --------- を、使用しタスクで自動シャットダウンをしていますが、 シャットダウンをさせるより先に任意のプログラム(.exe)を終了させてから上記の「poweroff.vbs」を実行するにはどうしたらいいでしょうか? このプログラムに何か記述を追加すれば良いのか、そのほかの方法があるのか、わかりません。ご回答をお願い致します。 因みに私はプログラムに関しては無知なので、わかりやすくお願い致します。

  • oio
  • お礼率38% (17/44)

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4847/10260)
回答No.2

nantoka.exeを終了させるのはこういうプログラムです。 Set Service = GetObject("winmgmts:\\") Set ProcSet = Service.ExecQuery("Select * From Win32_Process Where Description=""nantoka.exe""") For Each Proc In ProcSet Proc.Terminate Next

oio
質問者

補足

早速のご回答ありがとうございます! ということは、例えば1つのVBSでプログラムを終了させてから、 シャットダウンしようとすると、、、 こういう記述をすれば良いということでしょうか? ↓ (ホントに無知ですいません。) --------- Set Service = GetObject("winmgmts:\\") Set ProcSet = Service.ExecQuery("Select * From Win32_Process Where Description=""nantoka.exe""") For Each Proc In ProcSet Proc.Terminate Next Set objSystemSet = GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}").InstancesOf("Win32_OperatingSystem") For Each objSystem In objSystemSet objSystem.Win32Shutdown 8 Next) --------- ご返答、よろしくお願い致します。

その他の回答 (3)

  • notnot
  • ベストアンサー率47% (4847/10260)
回答No.4

5秒(5000ミリ秒)待つなら、 WScript.Sleep 5000

oio
質問者

お礼

御回答 ありがとうございます! 早速入れて、やってみましたが、やはり、シャットダウンする場合と、しない場合で、結果は変わらずでした。。 秒数を増やしたりして素人なりに検証した結果、poweroff.vbsのシャットダウンの記述に問題があるのではないかと思い、 色々検索して、発見した記述(下記アドレス) http://www.microsoft.com/japan/technet/scriptcenter/scripts/desktop/state/dmstvb08.mspx に書き換えましたら、問題なくシャットダウンしました。 何十回もテストした結果、問題なくシャットダウン出来ました。 ありがとうございました。大変助かりました!!

  • notnot
  • ベストアンサー率47% (4847/10260)
回答No.3

>こういう記述をすれば良いということでしょうか? そうです。

oio
質問者

補足

御回答、ありがとうございます。 早速、下記の内容に(nantokaを任意にして)書き換え、 何度か試していますが、正常にシャットダウンする場合と、依然と変わらずシャットダウン出来ない場合(黒い画面でマウスポインタだけ残る状態)があります。 なので、教えていただいた命令だけのpoweroff.vbsと、1分後に今までの命令のpoweroff_.vbsにして検証してみましたら、 どちらも正常に実行します。 素人発想ですが、PCの処理がnantoka.exeの終了よりシャットダウンが追いつきすぎて正常に実行されないのかなと思いまして、 教えていただいた記述のあとに、「5秒後に」のような命令をだせるのでしょうか?素人質問で恐縮ですが、よろしくお願い致します。

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

vbsは全然読めませんが、単にshutdown.exeを起動して待ち合わせてるだけですかね。 任意のプログラムというのは普通のアプリケーションですか?他のプログラムからそのプログラムのwindowをチェックして「閉じる」ようにメッセージ送信できる場合もありますが、windowsの確認などかなり面倒なプログラムを組まなくてはいけません。基本的に手動で終了させる方が楽だと思います。 もしかしたらこういうプログラム↓で、コマンドラインから指定アプリを終わらせられるかもしれません。試す価値はある・・かなと。   http://www.vector.co.jp/soft/win95/util/se325643.html サービスアプリならshutdown時には手順を踏んで終わってくれますしnet stopで停止させられます(そのためだけにサービスアプリに作り変えたりもしますけど)。こちら↓のsexeあたりでサービスとして起動させてみてはどうですか?   http://www.nanshiki.co.jp/free/ こちらもやってみたことはないので、まったくの未検証です。すみません。

oio
質問者

補足

ご回答ありがとうございます。 とりあえず、No2の方のを試してみます。

関連するQ&A

  • エクセルVBAでPCシャットダウン

    ネットを検索してたら、PCをシャットダウンさせるというコード Set objSystemSet = GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}").InstancesOf("Win32_OperatingSystem") For Each objSystem In objSystemSet objSystem.Win32Shutdown 1 Next をみつけたので以下のように試してみました。 Sub TEST() Application.OnTime Now + TimeValue("0:05:00"), "PC_ShutDown" End Sub Sub PC_ShutDown() Set objSystemSet = _ GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}") _ .InstancesOf("Win32_OperatingSystem") For Each objSystem In objSystemSet objSystem.Win32Shutdown 1 Next End Sub ところが実行すると、ログオフし、画面に、「コンピュータの電源を切ることができます」と表示されるのですが、そこでとまってしまいます。 PCの電源ボタンも長押しないときかなくなります。 自動で電源は切れないのでしょうか?

  • vbscriptについて

    vbsのファイルをダブルクリックするとシャットダウン・再起動・ログオフできるプログラムをネットで見つけました。 でも、休止状態にするプログラムがなかったのでどなたか知っていたら教えてください。 ちなみに再起動のプログラムです↓ ------------------------------------------------- Option Explicit Dim objShut ' シャットダウンオブジェクト Dim objOS ' オペレーティングシステムオブジェクト Dim objSystem ' オペレーティングシステムオブジェクト Set objShut = GetObject("winmgmts:{impersonationLevel = impersonate, (Shutdown)}") Set objOS = objShut.InstancesOf("Win32_OperatingSystem") For Each objSystem In objOS objSystem.Win32Shutdown 2 Next --------------------------------------------------

  • Windows2003サーバのリソース監視が理解出来なくて・・・・悩んでいます。

    Windows2003サーバのリソース監視の仕方及び知識についておしえてください(いまいち調べてみても理解が進みません・・・) サーバのリソースの監視ですが、簡単に言うとどんな状態になったら危険というか問題があるということになるのでしょうか? コミットチャージが増えるとよくないということを聞いたことがあるのですが・・・ 物理メモリだとか仮想メモリだとか用語の定義も私の中ではいまいちです。 平易に解説いただけると大変うれしいです。 監視する際ずっと見ているわけにもいかないですよね。 AD上にあるサーバーとしてVBScriptなどで自分のPCから見れればいいかなとは思います。 こんなプログラムとかを見つけたのですが・・・うまく使えなかったです。。。 Set OSInfos = GetObject("winmgmts:{impersonationLevel=impersonate}").InstancesOf("Win32_OperatingSystem") For Each OSInfo In OSInfos Wscript.Echo "コミットチャージ: " & int((OSInfo.SizeStoredInPagingFiles - OSInfo.FreeSpaceInPagingFiles) / 1024) & "MB" Next

  • VBSについて教えてください。

    VBSについて教えてください。 イベントビューワのプロパティの変更(最大ログサイズとログサイズが最大値に達した時の操作)を以下のスクリプトにて変更したいと思っています。(スクリプトはhttp://www.microsoft.com/japan/technet/scriptcenter/scripts/logs/eventlog/lgevvb16.mspxで公開されているのを利用しています。) strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate,(Security)}!\\" & _ strComputer & "\root\cimv2") Set colLogFiles = objWMIService.ExecQuery _ ("Select * from Win32_NTEventLogFile") For each objLogfile in colLogFiles strLogFileName = objLogfile.Name Set wmiSWbemObject = GetObject _ ("winmgmts:{impersonationLevel=Impersonate}!\\.\root\cimv2:" _ & "Win32_NTEventlogFile.Name='" & strLogFileName & "'") wmiSWbemObject.MaxFileSize = 1024000 wmiSWbemObject.OverwriteOutdated = 0 wmiSWbemObject.Put_ Next WindowsXPSP2では動作したのですが、Windows2000SP4では以下のエラーが発生します。 Windows Script Host スクリプト:スクリプトの場所 行:14 文字:5 エラー:WBEM_FLAG_USE_AMENDED_QUALIFIERSが指定されていない場合は修正オブジェクトを置くことはできません コード:80041066 ソース:SWbemObject VBSについては全く理解できておりません。 Windows2000で動作させるためにんはどこを修正すればいいでしょうか?

  • シャットダウンスクリプトの記述

    ドメインに参加している WinXP クライアントから、ワークグループ環境の複数台の Windows Server 2003 (主に) に対して ping を実行し、ping に対して応答があった場合はシャットダウンするスクリプトを記述したいと考えています。 # ワークグループ環境の Windows Server 2003 は検証環境で、社内セキュリティポリシーの運用上ドメインに参加できません。 この場合、 1. 複数のマシンに ping を打つ 2. 1 で応答がかえってくれば管理者の資格情報を使用してログイン 3. シャットダウンを実行 という流れになると思います。 そして、最終的には 1 が成功した場合に If 構文で 2、および、3 を実行する、という ように書けば一連の処理は成功すると考えています。 現在上記 1~3 の処理で細分化し、それぞれについて動作確認をとっています。 しかし、2、および、3 を実行してもうまくいかないため、これらについて伺いたく 質問させていただきます。 2 について 以下の構文を組んでいますが、vbs を実行すると、後述のエラーダイアログが表示されます (対象 PC やアカウント名などはダミーとご認識ください)。 別の資格情報 (接続先マシンの管理者アカウント) を指定して接続できるコードをご教授ください。 ----- Const WbemAuthenticationLevelPktPrivacy = 6 strComputer = "atl-ws-01" strNamespace = "root\cimv2" strUser = "Administrator" strPassword = "4rTGh2#1" Set objWbemLocator = CreateObject("WbemScripting.SWbemLocator") Set objWMIService = objwbemLocator.ConnectServer (strComputer, strNamespace, strUser, strPassword) objWMIService.Security_.authenticationLevel = WbemAuthenticationLevelPktPrivacy Set colItems = objWMIService.ExecQuery ("Select * From Win32_OperatingSystem") For Each objItem in ColItems Wscript.Echo strComputer & ": " & objItem.Caption Next ----- エラー : RPC サーバーを利用できません。 コード : 800706BA ソース : SWbemLocator 3 について 以下の構文を組んでいますが、エラーは表示されないものの、シャットダウンが開始されません。 ----- On error resume Next Const LogOff = 0 'ログオフ Const REBOOT = 2 '再起動 Const SHUTDOWN = 8 'シャットダウン Dim objWMIService Dim colOperatingSystems Dim objOperatingSystem Set objWMIService = GetObject("winmgmts:{impersonationLevel= impersonate,(Shutdown)}\\" & strComputer & "\root\cimv2") Set colOperatingSystems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem") For Each objOperatingSystem in colOperatingSystems objOperatingSystem.Win32Shutdown(SHUTDOWN) Next Set objWMIService = Nothing Set colOperatingSystems = Nothing Call ErrorCheck End Function ----- また、試しに objNetwork.MapNetworkDrive を使用してサーバーの IPC$ に接続しログインした後に上記処理を試行しましたが、 シャットダウンが進みませんでした。 何卒よろしくお願いいたします。

  • スクリプト:特権を保有していません

    Const wshYes = 6 Const wshNo = 7 Const wshYesNoDialog = 4 Const wshQuestionMark = 32 Set objShell = CreateObject("Wscript.Shell") intReturn = objShell.Popup("再起動処理キャンセルしますか?(60秒以内)", _ 60, "再起動処理開始", wshYesNoDialog + wshQuestionMark) If intReturn = wshYes Then Wscript.Echo "再起動処理をキャンセルしました" ElseIf intReturn = wshNo Then Set colOperatingSystems = GetObject("winmgmts:{(Shutdown)}").ExecQuery("Select * from Win32_OperatingSystem") For Each objOperatingSystem in colOperatingSystems ObjOperatingSystem.Win32Shutdown(6) Next Wscript.Echo "再起動処理を実行しています。" Else Set colOperatingSystems = GetObject("winmgmts:{(Shutdown)}").ExecQuery("Select * from Win32_OperatingSystem") For Each objOperatingSystem in colOperatingSystems ObjOperatingSystem.Win32Shutdown(6) Next Wscript.Echo "タイムアウトです。再起動処理を実行しています。" End If とスクリプトをいただきましたが、特権を保有していません。コード 80041062 が表示されてしまいます。あいにく、ど素人のため特権を付与してあげる方法がわかりません。もしお分かりになるか いらっしゃいましたら、ご教示をお願いいたします。

  • VBSからbat実行(WMI)して戻り値を取得する

    WSH初心者です。 WSH(remote.vbs)からWMI使用で別サーバのA.batを実行しているのですが、 A.batの戻り値はどのように取得すれば良いのでしょうか? -■remote.vbs(一部抜粋)------------------------------------------ ' #WMI に接続 Wim32_Process クラスを取り出す Set clsProcess = GetObject("winmgmts:{impersonationLevel=impersonate}" & "!" & リモート先PC & "Win32_Process") ' #プロセスの作成 lngResult = clsProcess.Create(A.bat, null, null, processId) -------------------------------------------------------------- -■A.bat------------------------------------------ exit /B %RetCode% ------------------------------------------------- A.batで返している%RetCode%の値をremote.vbs側で取得したいのです。 どなたかご存じでしたらご教授の程よろしくお願い致します。

  • リモートコンピュータの再起動を行うWScript

    リモートコンピュータの再起動を行うWScriptを作成しています スクリプトを実行すると、リモート先のマシンがXP(32bit)では実行されるのですが、windows7(64bit)では「書き込みできません:’GetObject’」とエラーが表示されスクリプトを正常に動作させることができませんでした。 windows7で動作しない原因がわかるかたおりましたら、ご教示のほどよろしくお願いいたします。 --------------------------------------------------- ....(省略) for i=0 to arg.count-1 set obj = GetObject("winmgmts:{impersonationLevel=impersonate,(RemoteShutdown)}//host-" & arg(i)) obj.ExecQuery("select * from Win32_OperatingSystem where Primary=true").Reboot() next --------------------------------------------------- ※ソースはここから拾ってきました http://technet.microsoft.com/ja-jp/library/bb742445.aspx#ID0EQFAC

  • リモートPCの情報取得について

    Windows2000から下のVBSを実行しますがうまくデータを取得できません。 取得先のPCもWinodows2000です。.NET Framework 1.1以上です。 ファイヤーウォールの類もありません。 どなたか教えて下さい。 ------------------------------------------------------ strComputer = "192.168.2.●●" Set wbemServices = GetObject("winmgmts:\\" & strComputer) Set wbemObjectSet = wbemServices.InstancesOf("Win32_LogicalMemoryConfiguration") For Each wbemObject In wbemObjectSet WScript.Echo "物理メモリの合計 (kb): " & wbemObject.TotalPhysicalMemory Next

  • VBAでプロセッサ情報を取得すると・・・

    XPを使っています。 システムプロパティでは 「Intel(R)Core(TM)2 Duo CPU E7500 @2.93GHz」 なのですが ------------------------------------------------ Sub プロセッサの情報を取得する() Dim システム, 各要素 As Variant Set システム = GetObject("winmgmts:{impersonationLevel=impersonate}").InstancesOf("Win32_Processor") For Each 各要素 In システム With 各要素 Debug.Print "プロセッサ: " & .Name End With Next Set システム = Nothing End Sub ------------------------------------------------ VBAで上記コードをを実行すると、 「プロセッサ: Intel Pentium III Xeon プロセッサ」 が返ってきます。 どちらが正しいのでしょうか? そもそも バージョンは2003です。

専門家に質問してみよう