C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: windowsサービスでサーバーの情報取得


(過去ログ 80 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■47490 / inTopicNo.1)  windowsサービスでサーバーの情報取得
  
□投稿者/ ボン (1回)-(2010/03/04(Thu) 11:14:20)

分類:[VB.NET/VB2005 以降] 

パソコンOS:Windows XP Professional SP2(32bit)
使用ソフト:Microsoft VisualStudio2005 Professional Edition
メモリー:1GB
CPU:Celeron 1.60GHz

初めまして。ボンと申します。初心者ですがご教授お願い致します。

現在、ネットワークで接続されているサーバーの
HDD、CPU、メモリの容量を取得するwindowsサービスを下記のソースで作成しております。
ですが、「アクセスが拒否されました。 (HRESULT からの例外: 0x80070005 (E_ACCESSDENIED))」
とエラーが出て接続出来ず、難航しております・・・

       Dim wSize As Long      'HDD容量
            Dim wFree As Long      'HDD空容量
            Dim wCpu As Integer    'CPU
            Dim wMemory As Long    'MEMORY
            Dim wco As New System.Management.ConnectionOptions

            wco.Username = wstrUser 'ユーザー名
            wco.Password = wstrPass 'パスワード
            Dim wsc As New System.Management.ManagementScope("\\" & wstrIp & "\ROOT\CIMV2", wco)
            wsc.Connect()   '接続

            'HDD
            Dim oq1 As New System.Management.ObjectQuery("select * from Win32_LogicalDisk")
            Using mos As New System.Management.ManagementObjectSearcher(wsc, oq1)
                For Each mo As System.Management.ManagementObject In mos.Get()
                    'Cドライブの容量取得
                    If mo("NAME").ToString = "C:" Then
                        wSize = mo("Size")
                        wFree = mo("FreeSpace")
                    End If
                Next mo
            End Using

            'CPU
            Dim oq2 As New System.Management.ObjectQuery("Select LoadPercentage From Win32_Processor")
            Using mos As New System.Management.ManagementObjectSearcher(wsc, oq2)
                For Each mo As System.Management.ManagementObject In mos.Get()
                    wCpu = mo("LoadPercentage")
                Next
            End Using

            'MEMORY
            Dim oq3 As New System.Management.ObjectQuery("Select FreePhysicalMemory From Win32_OperatingSystem")
            Using mos As New System.Management.ManagementObjectSearcher(wsc, oq3)
                For Each mo As System.Management.ManagementObject In mos.Get()
                    wMemory = mo("FreePhysicalMemory")
                Next
            End Using

試しにwindowsアプリケーションで同じソースで動かしてみたところ、正常に接続出来ました。
windowsサービスで接続するには、何か特別なやり方があるのでしょうか?
申し訳ありませんが、ご教授お願い致します。

引用返信 編集キー/
■47493 / inTopicNo.2)  Re[1]: windowsサービスでサーバーの情報取得
□投稿者/ はつね (1206回)-(2010/03/04(Thu) 12:25:00)
No47490 (ボン さん) に返信
> 現在、ネットワークで接続されているサーバーの
> HDD、CPU、メモリの容量を取得するwindowsサービスを下記のソースで作成しております。

そのWindowsサービスはどのアカウントで動作させるようにしてますか?

引用返信 編集キー/
■47494 / inTopicNo.3)  Re[1]: windowsサービスでサーバーの情報取得
□投稿者/ なちゃ (409回)-(2010/03/04(Thu) 12:26:31)
エラーが発生するのはどこですか?
また、サービスはどういうアカウントで動かしてますか?

引用返信 編集キー/
■47497 / inTopicNo.4)  Re[2]: windowsサービスでサーバーの情報取得
□投稿者/ ボン (2回)-(2010/03/04(Thu) 13:15:59)
お早い返事ありがとうございます。

無知で申し訳ありませんが、サービスのアカウントは
コントロールパネル→管理ツール→サービスのログオンにある情報でしょうか?
それでしたら、ローカルシステムアカウントが選択されています。

>>なちゃさん
エラーが起きた箇所は
wsc.Connect() '接続
です。

引用返信 編集キー/
■47504 / inTopicNo.5)  Re[3]: windowsサービスでサーバーの情報取得
□投稿者/ かたぎり (16回)-(2010/03/04(Thu) 15:29:51)
ローカルシステムアカウントだとアクセス制限されますね

情報を取得したいサーバーに対して詐称して接続するとか
システムアカウントで動作させてみるとか
いくつか方法があるかとは思いますが
動作させたいインフラ環境に合わせて設計していく必要があると思います
引用返信 編集キー/
■47509 / inTopicNo.6)  Re[4]: windowsサービスでサーバーの情報取得
□投稿者/ ボン (3回)-(2010/03/04(Thu) 15:52:48)
>>かたぎりさん
ありがとうございます。
ご指摘にありましたように、アクセス制限がありました。
サービスに対して正しいアカウント、パスワードを設定すると正常に動作致しました。

みなさま、どうもありがとうございました。
今後ともよろしくお願い致します。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -