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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.66127 の関連記事表示

<< 0 >>
■66127  WMIでのIP設定
□投稿者/ Ha -(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
親記事 /過去ログ111より / 関連記事表示
削除チェック/

■66133  Re[1]: WMIでのIP設定
□投稿者/ 魔界の仮面弁士 -(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
記事No.66127 のレス /過去ログ111より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -