none
TCP/IPポートの追加でのエラー RRS feed

  • 質問

  • VB2008にてプリンタのTCP/IPポートの追加・削除を行なうプログラムを作成しています。

    Dim Tcp As WbemScripting.SWbemObject
    Dim Locator As WbemScripting.SWbemLocator
    Dim Service As WbemScripting.SWbemServices
    Dim MesStr As String

    Locator = New WbemScripting.SWbemLocator
    Service = Locator.ConnectServer

    Tcp = Service.Get("Win32_TCPIPPrinterPort").SpawnInstance_

    Tcp.Name = "IP_192.168.0.1"
    Tcp.Protocol = 1
    Tcp.HostAddress = "192.168.0.1"

    MesStr = Tcp.Put_

    Set Tcp = Nothing
    Set Locator = Nothing
    Set Service = Nothing


    追加の部分は以上のように記述しており、1度目は追加できます。
    追加したTCP/IPポートを削除し、再度実行するとErrorCode -2147467259でエラーになってしまいます。
    プログラムを終了させてから再度起動すると1度目の実行は成功します。

    原因と対処がお分かりになれば教えてください。
    2009年8月20日 7:24

回答

  • Public Class Form1

        Dim Tcp As WbemScripting.SWbemObject
        Dim Locator As WbemScripting.SWbemLocator
        Dim Service As WbemScripting.SWbemServices
        Dim MesStr As String

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Tcp.Name = "IP_192.168.0.1"
            Tcp.Protocol = 1
            Tcp.HostAddress = "192.168.0.1"
            MesStr = Tcp.Put_.ToString()

        End Sub

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Locator = New WbemScripting.SWbemLocator
            Service = Locator.ConnectServer
            Tcp = Service.Get("Win32_TCPIPPrinterPort").SpawnInstance_
        End Sub

        Private Sub Form1_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed
            Tcp = Nothing
            Locator = Nothing
            Service = Nothing
        End Sub
    End Class

    「Tcp = Service.Get("Win32_TCPIPPrinterPort").SpawnInstance_」
    の実行を一回だけにすると大丈夫になりました。
    単に再実行不可な Function である可能性を考えましたが
    理由は分かりませんでした。

    • 回答としてマーク sino999 2009年8月21日 1:30
    2009年8月20日 10:33

すべての返信

  • Public Class Form1

        Dim Tcp As WbemScripting.SWbemObject
        Dim Locator As WbemScripting.SWbemLocator
        Dim Service As WbemScripting.SWbemServices
        Dim MesStr As String

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Tcp.Name = "IP_192.168.0.1"
            Tcp.Protocol = 1
            Tcp.HostAddress = "192.168.0.1"
            MesStr = Tcp.Put_.ToString()

        End Sub

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Locator = New WbemScripting.SWbemLocator
            Service = Locator.ConnectServer
            Tcp = Service.Get("Win32_TCPIPPrinterPort").SpawnInstance_
        End Sub

        Private Sub Form1_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed
            Tcp = Nothing
            Locator = Nothing
            Service = Nothing
        End Sub
    End Class

    「Tcp = Service.Get("Win32_TCPIPPrinterPort").SpawnInstance_」
    の実行を一回だけにすると大丈夫になりました。
    単に再実行不可な Function である可能性を考えましたが
    理由は分かりませんでした。

    • 回答としてマーク sino999 2009年8月21日 1:30
    2009年8月20日 10:33
  • ありがとうございました。うまく動作しました。VB6の時には再実行できていたものがVB2008で再実行できないのは何か釈然としませんが。

    2009年8月21日 1:34