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

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

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

Re[1]: WMIでのIP設定


(過去ログ 111 を表示中)

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

■66127 / inTopicNo.1)  WMIでのIP設定
  
□投稿者/ Ha (1回)-(2013/04/02(Tue) 16:49:44)

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

以前にWMIを使用した固定IPの変更する処理を作成したのですが、今回Windows8の端末が導入され同処理では固定IPの変更ができなくなりました。
WMIでコンピュータ名やIPアドレスの取得は動くのでWMIが完全に動かない訳ではなさそうです。

また、Windows8の導入に合わせてCOM参照(Microsoft WMI Scripting V1.2 Library)からSystem.Managementの参照に変更しました。
それでもWindows7では動作するのですが、以下のソースでは、Windows8固定IPに変更する際に「2147749891」のエラーが戻ってきてしまいます。

Windows8で動作させるのに別の方法をとらなければならないのでしょうか?
ローカルのAdministrator権限はついているのですが、新たに権限等が追加する必要があるのでしょうか?


Public Function SetStaticIPAddress(ByVal sAdapter As String, _
ByRef sIP As String, _
ByRef sSubnet As String, _
ByRef sGateWay As String, _
ByVal sDNSDiv() As String, _
ByRef sErrMsg As String) As Boolean

Dim sQuery As String = String.Empty
Dim oSearcher As New ManagementObjectSearcher()
Dim oMoc As ManagementObjectCollection
Dim oMo As ManagementObject
Dim oScope As New ManagementScope

Dim oNewIp As ManagementBaseObject = Nothing
Dim oSetIp As ManagementBaseObject = Nothing

Dim oNewGate As ManagementBaseObject = Nothing
Dim oSetGate As ManagementBaseObject = Nothing

Dim oNewDns As ManagementBaseObject = Nothing
Dim oSetDns As ManagementBaseObject = Nothing

Dim lRetIp As Long = Nothing
Dim lRetGate As Long = Nothing
Dim lRetDns As Long = Nothing

Try

oScope = New ManagementScope("\\localhost\root\cimv2")
oScope.Connect()
If oScope.IsConnected <> True Then
Exit Try
End If

sQuery = "SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = true and Description Like '%" & sAdapter & "%'"
oSearcher = New ManagementObjectSearcher(sQuery)
oMoc = oSearcher.Get

If oMoc.Count <> 0 Then
For Each oMo In oMoc
oNewIp = oMo.GetMethodParameters("EnableStatic")
oNewIp("IPAddress") = New String() {sIP}
oNewIp("SubnetMask") = New String() {sSubnet}

oSetIp = oMo.InvokeMethod("EnableStatic", oNewIp, Nothing)
'結果
lRetIp = Convert.ToInt64(oSetIp.Properties("ReturnValue").Value) ←ここで「2147749891」のエラー番号が返ってきます。

oNewGate = oMo.GetMethodParameters("SetGateways")
oNewGate("DefaultIPGateway") = New String() {sGateWay}
oNewGate("GatewayCostMetric") = New Integer() {1}

oSetGate = oMo.InvokeMethod("SetGateways", oNewGate, Nothing)
'結果
lRetGate = Convert.ToInt64(oSetGate.Properties("ReturnValue").Value)

oNewDns = oMo.GetMethodParameters("SetDNSServerSearchOrder")
oNewDns("DNSServerSearchOrder") = sDNSDiv

oSetDns = oMo.InvokeMethod("SetDNSServerSearchOrder", oNewDns, Nothing)
'結果
lRetDns = Convert.ToInt64(oSetDns.Properties("ReturnValue").Value)


Next
Else
Exit Try
End If


Return True
Catch exErr As Exception
sErrMsg = exErr.Message
Return False
End Try
End Function

引用返信 編集キー/
■66133 / inTopicNo.2)  Re[1]: WMIでのIP設定
□投稿者/ 魔界の仮面弁士 (188回)-(2013/04/02(Tue) 18:45:17)
No66127 (Ha さん) に返信
> System.Managementの参照に変更しました。
そこのクラス群の多く(ManagementBaseObject 継承クラスなど)は、
IDisposable を実装しています。念のため、Using するか
Dispose するかの処理を加えておいた方が良いかもしれません。


> Windows8固定IPに変更する際に「2147749891」のエラーが戻ってきてしまいます。
WBEM_E_ACCESS_DENIED (0x80041003) のエラーコードですね。

EXE を右クリックして「管理者として実行」するか、もしくは、
app.manifest で requireAdministrator を指定しておいた場合はどうでしょうか。


> Windows8で動作させるのに別の方法をとらなければならないのでしょうか?
PowerShell だとどうでしょうか。
http://www.upken.jp/kb/powershll-setipaddress.html
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -