• 締切済み

C#でリモートPC(win2000)シャットダウン

C#でリモートPC(win2000)シャットダウンさせたいのですが、 ************************************ string svr = "コンピュータ名"; string usr = "ユーザー名"; string pass = ""; ConnectionOptions options = new ConnectionOptions(); options.Username = usr; options.Password = pass; string mPath = @"\\" + svr + @"\root\cimv2"; ManagementScope scope = new ManagementScope(mPath, options); scope.Connect(); System.Management.ObjectQuery oq = new System.Management.ObjectQuery("SELECT * FROM Win32_OperatingSystem"); anagementObjectSearcher searcher = new ManagementObjectSearcher(scope, oq); ManagementObjectCollection collection = searcher.Get(); foreach( ManagementObject mo in collection ) { string[] ss={""}; mo.InvokeMethod("Shutdown",ss); } *********************************************** とやっても2000で『電源がきることができます』の画面で完全にシャットダウンしないのです。完全にシャットダウンする方法はありますでしょうか?

noname#46712
noname#46712

みんなの回答

回答No.1

そもそも、そのPCは、ローカルでも完全にシャットダウンできるのでしょうか? おっしゃっている画面は、BIOSが、電源管理に対応していない場合に出るスクリーンのような感じです。

noname#46712
質問者

補足

シャットダウンするAPIをローカル(Win2000)で実行するとやはり完全にシャットダウンします。しかし、リモート(WinXP)で上記のPGを実行するとシャットダウンするPCに『コンピュータの電源を切ることができます』というダイアログボックスが出てしまい、完全にシャットダウンはしません。ちなみにシャットダウンするPCがXPでは完全にシャットダウンすることを考えるとWin2000のAPIに問題があるものと考えています。kentarou2333さんはどう考えますか?

関連するQ&A

  • .NET1.1でPING処理(C#からの変換)

    VB2002+WIN2000を使用。 リモート端末へのアクセス前に起動確認処理としてPINGを使い、電源OFF時の待ち時間を減らしたいと考えています。 ○PINGの他に導通確認できる手軽なものがあるのでしたら教えてください。 PINGの処理はネットで検索した結果C#(1.1)のものでしたら発見できたため、それを利用しようと思っています。(サイトでもVBへの変換は簡単にできるとあったので^_^;) 自分なりに変換してみましたがエラーが発生してしまい原因/対応方が分かりません。 ぜひご教授下さい。よろしくお願いいたします。 (補足が必要であれば記述します。) 【元からの変更】 ・引数はなしにし、固定にしました。 ・Button1の処理に記述しました。 ・参照設定でSystem.Managementを追加しました。 【エラー】 スレッド '<名前がありません>' (0x59c) はコード 0 (0x0) で終了しました。 'System.Management.ManagementException' のハンドルされていない例外が system.management.dll で発生しました。 追加情報 : 無効なクラスです 【予想】 searcherにGetがない? 対策が分からず… ----- 変更プログラム ------ Imports System Imports System.Management Dim arg As String arg = "192.168.0.1" 'クエリ文字列の設定() Dim searcher As ManagementObjectSearcher = New ManagementObjectSearcher() searcher = New ManagementObjectSearcher("select * from Win32_PingStatus where address = '" & arg & "'") ' クエリ結果のとりだし Dim mo As ManagementObject 'エラー箇所 For Each mo In searcher.Get Dim i As Integer ' 結果のプロパティのチェックと状態の表示 If mo.Properties("StatusCode").Value = "" Or Convert.ToInt32(mo.Properties("StatusCode").Value) <> 0 Then Console.WriteLine(arg + ":稼働していません") Else Console.WriteLine(arg + ":稼働中") Console.WriteLine("IPAddress:" & mo.Properties("ProtocolAddress").Value) Console.WriteLine("ResponseTime:" & mo.Properties("ResponseTime").Value) End If Next Console.WriteLine("----------------") ------ 元プログラム(C#) ---------------------- using System; using System.Management; class PingExec { public static void Main(string[] args) { if(args.Length > 0) { foreach(string arg in args) { // クエリ文字列の設定 ManagementObjectSearcher searcher = new ManagementObjectSearcher( "select * from Win32_PingStatus where address = '" + arg + "'"); // クエリ結果のとりだし foreach( ManagementObject mo in searcher.Get() ) { // 結果のプロパティのチェックと状態の表示 if(mo.Properties["StatusCode"].Value == null || Convert.ToInt32(mo.Properties["StatusCode"].Value) != 0) { Console.WriteLine(arg + ":稼働していません"); } else { Console.WriteLine(arg + ":稼働中"); Console.WriteLine("IPAddress:" + mo.Properties["ProtocolAddress"].Value); Console.WriteLine("ResponseTime:" + mo.Properties["ResponseTime"].Value); } } Console.WriteLine("----------------"); } } } }

  • VB.NetのWMIを用いたリモート端末への接続

    下記の環境で作成したWinアプリからWMIを用いてリモート 端末に接続し、その端末のCPU使用率を取得しようとする と、下記ソースの30行目実行時に不定期間隔でエラーに なったりならなかったりします。どのたか解決策をご存知でし たら、お教え願います。 開発環境:VisualStudio 2005 / .NET FrameWorkバージョン:2.0 開発言語:VB.NET リモート接続端末:Windows Server 2003 R2 リモート接続ポート:135 リモートインストール済み.NET FrameWorkバージョン:1.0、2.0 エラー内容:「オブジェクト参照がオブジェクト インスタンスに設定されていません。」 以下ソース↓ Imports System.Management Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Query As New ObjectQuery Dim Options As New ConnectionOptions Dim Scope As New ManagementScope Dim Searcher As New ManagementObjectSearcher Dim PrcCol As ManagementObjectCollection Dim sngCpu使用率 As Single = 0 Dim objPrc As ManagementBaseObject = Nothing Try Query.QueryString = "SELECT * FROM Win32_Processor" Options.Username = "接続端末名" + "\" + "ログインID" Options.Password = "ログインパスワード" Scope.Options = Options Scope.Path.Server = "接続端末名" Searcher.Query = Query Searcher.Scope = Scope Do PrcCol = Searcher.Get For Each objPrc In PrcCol 'CPU使用率取得 sngCpu使用率 = CSng(objPrc("LoadPercentage").ToString) '←ここでエラー Next Loop Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical) End Try End Sub End Class ここまで ↑

  • ArrayListのgetメソッドが実行できない!

    public class ALTest{ public static void main(String[] args){ Collection<String> list = new ArrayList<String>(); list.add(One);list.add(Two);list.add(Three); //ここに記述 } } 上記「ここに記述」の箇所に以下を書いた場合の話です。  String ss = list.get(0); Collection<String>型なのでメソッドget()は実行できません。と解説にあるのですが、 理由がわかりません。Get()がstaticメソッドというわけでもなさそうだし。

    • ベストアンサー
    • Java
  • lucene フィールド値の表示について

    Luceneの検索で同じフィールド値を複数設定したドキュメントに対してサーチを行いヒットした場合について,項目の表示をテストしていたのですが,最初にセットしたフィールド内容しか表示しません。 ヒットしたフィールド値をすべて表示させる方法を教えてくださいませ 以下ソースです。 private static final String F_SHOP = "shop"; private static final String F_PRICE = "price"; private static final String[] SHOPS = { "ショップ1", "ショップ1", "ショップ1", "ショップ1", "ショップ1", "ショップ1", "ショップ1", "ショップ1", "ショップ1", "ショップ1", "ショップ1", "ショップ1", "ショップ1", "ショップ1" }; private static final String[] PRICES = { "20080520 20080620", "20080420 20080620", "20080520 20080620", "20080420 20080620", "20080320 20080620", "20080420 20080620", "20080420 20080620", "20080320 20080620", "20080420 20080620", "20080420 20080620", "20080420 20080620", "20080420 20080620", "20080420 20080620", "20080420 20080620" }; private static Directory dir; private static WhitespaceAnalyzer analyzer = new WhitespaceAnalyzer(); public static void main(String[] args) throws IOException, ParseException { makeIndex(); searchIndex(); dir.close(); } private static void makeIndex() throws IOException{ dir = new RAMDirectory(); IndexWriter writer = new IndexWriter( dir, analyzer, true ); for( int i = 0; i < SHOPS.length; i++ ){ Document doc = new Document(); doc.add( new Field( F_SHOP, SHOPS[i], Store.YES, Index.UN_TOKENIZED ) ); String[] s = PRICES[i].split(" "); for(String ss: s ){ doc.add( new Field( F_PRICE, ss, Store.YES, Index.UN_TOKENIZED ) ); } writer.addDocument( doc ); } writer.close(); } private static void searchIndex() throws IOException, ParseException{ QueryParser qp1 = new QueryParser( F_SHOP, analyzer ); QueryParser qp2 = new QueryParser( F_PRICE, analyzer ); Query query1 = qp1.parse( "ショップ1" ); Query query2 = qp2.parse( "20080620" ); BooleanQuery query3 = new BooleanQuery(); query3.add(query1,Occur.MUST); query3.add(query2,Occur.MUST); IndexSearcher searcher = new IndexSearcher( dir ); Hits hits = searcher.search( query2 ); for( int i = 0; i < hits.length(); i++ ){ Document doc = hits.doc( i ); float score = hits.score( i ); System.out.println( score + "\t" + doc.get( F_SHOP ) + "\t" + doc.get( F_PRICE ) ); } searcher.close(); } 実行結果: 0.5818795 ショップ1 20080520 0.5818795 ショップ1 20080420 0.5818795 ショップ1 20080520 0.5818795 ショップ1 20080420 0.5818795 ショップ1 20080320 0.5818795 ショップ1 20080420 0.5818795 ショップ1 20080420 0.5818795 ショップ1 20080320 0.5818795 ショップ1 20080420 0.5818795 ショップ1 20080420 0.5818795 ショップ1 20080420 0.5818795 ショップ1 20080420 0.5818795 ショップ1 20080420 0.5818795 ショップ1 20080420 望んでいる実行結果: 0.5818795 ショップ1 20080620 0.5818795 ショップ1 20080620 0.5818795 ショップ1 20080620 0.5818795 ショップ1 20080620 0.5818795 ショップ1 20080620 0.5818795 ショップ1 20080620 0.5818795 ショップ1 20080620 0.5818795 ショップ1 20080620 0.5818795 ショップ1 20080620 0.5818795 ショップ1 20080620 0.5818795 ショップ1 20080620 0.5818795 ショップ1 20080620 0.5818795 ショップ1 20080620 0.5818795 ショップ1 20080620 よろしくお願いします。

  • リモートでシャットダウンしたい

    Windows8を使用しています。 Classic Shellでスタートボタンを追加しています。 リモートでシャットダウンするにあたって、2つの方法を使い分けたいと思っています。 1つ目。 リモートデスクトップで接続時にスタートボタンを押してもシャットダウンという項目が表示されません。 どうすれば表示されますか。 2つ目。 コマンドプロンプトにて「shutdown -s -m \\コンピュータ名 -c "シャットダウンします。"」と入力しても、「コンピュータ名: アクセスが拒否されました。(5)」と表示されます。 どうすればシャットダウンできるようになるのでしょうか。

  • リモートシャットダウンができなくなりました

    以前、(XPHome)有線LAN環境で、数台のPCを使っている際にはどのPCからでも他のPCのリモートシャットダウンができていました。 (直接コマンドを入力せず、リモートシャットダウン専用のフリーソフトを使用していました) ところが最近、(1台を除き)全てのPCを新しく入れ替えたら、リモートシャットダウンができなくなりました。 (何の反応もしません) 違いと言えばOSが(XP-Professional)になったくらいです。 また、新PCから旧PCの1台(XPHome)をシャットダウンしようとしても、やはりできなくなりました。 素人に近い私が、リモートシャットダウンできるようにするにはむずかいでしょうか?

  • リモートシャットダウンができません

    下記のリンクを参考にコマンドラインからリモートコンピュータのシャットダウンコマンドを実行しましたが shutdown -s -m \\リモートホスト名 アクセスが拒否されました。 となりシャットダウンが実行できません。 リモートホスト、ローカルホスト共WindowsXp pro sp2です リモートホスト上で何か特別な設定が必要なのでしょうか ご教授お願いします。 システムをリモートからシャットダウンする Windows XP、Windows Server 2003の場合 http://www.atmarkit.co.jp/fwin2k/win2ktips/374rmtshutdown/rmtshutdown.html

  • LDAPのコネクションが切れません

    すいません、、何方か知っている方がいましたらご教授下さい。 アプリ環境:windows2003 Websphere v5.1 JDK 1.4.2 LDAP環境:AIX5 OpenLDAP の環境で、javaからLDAPにアクセスするロジックを作成中です。 アクセスは出来るのですが、コネクションがclose()を使っても切れません。 ガベージコレクションで切れる事はわかったのですが、何かほかの方法はないでしょうか?よろしくお願いいたします。 import javax.naming.Context; import javax.naming.NamingEnumeration; import javax.naming.NamingException; import javax.naming.directory.Attribute; import javax.naming.directory.Attributes; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; import javax.naming.directory.SearchControls; import javax.naming.directory.SearchResult; import javax.naming.ldap.InitialLdapContext; import javax.naming.ldap.LdapContext; public class LdapDAO { private Hashtable env; private DirContext ctx = null; public LdapDAO() throws NamingException { String url = "ldap://172.22.1.85:389"; String auth = "simple"; String base = "ou=people,dc=com"; String user = "***"; String pass = "***"; env = new Hashtable(); env.put( Context.INITIAL_CONTEXT_FACTORY, cf); env.put( Context.PROVIDER_URL, url); env.put("java.naming.ldap.version", "3"); env.put( Context.SECURITY_AUTHENTICATION, auth); env.put( Context.SECURITY_PRINCIPAL, user); env.put( Context.SECURITY_CREDENTIALS, pass); env.put("com.sun.jndi.ldap.connect.timeout", "3000"); env.put("com.sun.jndi.ldap.connect.pool", "true"); env.put("com.sun.jndi.ldap.connect.pool.timeout", "2000"); } public String searchEmpAll(String employeeNumber, String flg) throws NamingException { String result = ""; ctx = new InitialDirContext(env); SearchControls cons = new SearchControls(); cons.setSearchScope(SearchControls.SUBTREE_SCOPE); cons.setReturningObjFlag(true); cons.setReturningAttributes(new String[]{****}); String filter = "****"; NamingEnumeration res = ctx.search(base, filter, cons); for(int i = 0; res.hasMore(); i++) { SearchResult entry = (SearchResult) res.next(); Attributes attrs = entry.getAttributes(); Attribute attribute = attrs.get(*****); if(attribute != null) { result = (String) attribute.get(); } } cons = null; res = null; ctx.close(); // System.gc(); return result; } }

    • ベストアンサー
    • Java
  • Win2000のシャットダウンが出来ません

    Win2000のシャットダウンが出来ません。 具体的には「スタート」-「シャットダウン」からシャットダウンを選択してもシャットダウン出来ません。毎回強制終了するのは具合が悪いと思うので、対処方法をご存知でしたらご回答よろしくお願いします。 蛇足かもしれませんがウィルス検索ソフトにVirus Scanを使用しています。

  • Win2000のシャットダウン後

    シャットダウン後、『設定を保存しています』って表示されてから4分くらいしてやっとシャットダウンできるんですけど、 昔は(OSをいれたばっか)のときは5秒くらいですぐシャットダウンできるんです。 この差はいったいなんですか誰か~詳しい人教えてください~その解決法も よろしくお願いします~