none
錯誤:"並未將物件參考設定為物件的執行個體" & "找不到" RRS feed

  • 問題

  • 以下是我的程式碼(一部分)(已修正程式碼。麻煩各位再看一次)

    Private Function Get_Motherboard_Sno() As String
            Dim mc As New ManagementClass("Win32_BaseBoard")
            mc.Scope.Options.EnablePrivileges = True
            Dim sno As String = ""
            For Each mo As ManagementObject In mc.GetInstances()
                sno = mo("SerialNumber")
            Next
            mc.Dispose()
            Return sno
    
        End Function
    
        Private Function Get_HD_Sno(ByVal idx As Byte) As String
    
            Dim qry As String = "SELECT * FROM Win32_PhysicalMedia" & " Where Tag = '\\\\.\\PHYSICALDRIVE" & idx & "'"
    
            Dim mos As New ManagementObjectSearcher(qry)
    
            mos.Scope.Options.EnablePrivileges = True
    
            Dim sno As String = ""
    
            For Each mo As ManagementObject In mos.Get()
    
                sno = mo("SerialNumber").ToString.Trim
            Next
            mos.Dispose()
            Return sno
        End Function
    
    錯誤是這段"sno = mo("SerialNumber").ToString.Trim"
    以上執行在某些系統上(不是所有),會有”並未將物件參考設定為物件的執行個體”的問題。


     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
     GetProcessorInfo()
    
     End Sub
    
        Private Sub GetProcessorInfo()
    
            Dim SelQry As New SelectQuery("Win32_Processor")
    
            Using MngObjSch As New ManagementObjectSearcher(SelQry)
    
                For Each MngObj As ManagementObject In MngObjSch.Get()
                    TextBox12.Text = (String.Format("{0}", MngObj!Caption))
                    TextBox15.Text = (String.Format("{0} KB", MngObj!L2CacheSize))
                    TextBox17.Text = (String.Format("{0} V", MngObj!CurrentVoltage))
                    TextBox16.Text = (String.Format("{0}", MngObj!NumberOfCores))
                    TextBox19.Text = String.Format("{0:##0.00} %", PageFile_Usage.NextValue)
                    TextBox20.Text = String.Format("{0:##0.00} %", PageFile_UsagePeak.NextValue)
                Next
            End Using
    
        End Sub
    
    錯誤是這段"
    TextBox16.Text = (String.Format("{0}", MngObj!NumberOfCores))"
    以上執行在某一些系統上(不是所有),會有”找不到”的問題。



    是否有人能夠幫我解答呢?感激不盡!

    先謝謝各位了!
    • 已編輯 龍犽 2009年12月5日 上午 08:54
    2009年12月5日 上午 12:34

解答

  • 一般是用
    If IsNothing(cptInfo) Then ...
    來判斷。

    檢查是否複寫,應該是要你查 cptInfo 出現在等號左邊的那幾行的邏輯。

    這種東西可能會因為機器而產生不同的錯誤,比如說不同的 WMI 資料庫並沒有該資訊,造成找不到物件的錯誤。沒硬碟的 SerialNumber 是滿怪的,建議你詳加檢查,看是啥原因無法取得,依據錯誤訊息來查找,或著到微軟下載中心抓 WMI 工具,透過該工具查找是否有該項資訊。
    T.L. Cheng
    • 已標示為解答 龍犽 2009年12月19日 上午 05:07
    2009年12月19日 上午 03:10
    版主

所有回覆

  • 發生錯誤時,畫面上會有個按鈕可點選詳細資料,把那個內容剪貼出來。

    你為啥拿兩個字串相減阿?
    TextBox4.Text = KB2MB(TotPhyMem - AvPhyMem) ' 顯示 RAM 已用

    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2009年12月5日 上午 01:15
  • 發生錯誤時,畫面上會有個按鈕可點選詳細資料,把那個內容剪貼出來。

    你為啥拿兩個字串相減阿?
    TextBox4.Text = KB2MB(TotPhyMem - AvPhyMem) ' 顯示 RAM 已用

    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。

    "並未將物件參考設定為物件的執行個體"的錯誤↓

    System.NullReferenceException: 並未將物件參考設定為物件的執行個體
       於 Windows小工具開發團隊.Form1.Timer13_Tick(Object sender, EventArgs e)
       於 System.Windows.Forms.Timer.OnTick(EventArgs e)
       於 System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)
       於 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


    "找不到"的錯誤↓

    System.Management.ManagementException: 找不到 
       於 System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode)
       於 System.Management.PropertyData.RefreshPropertyInfo()
       於 System.Management.PropertyDataCollection.get_Item(String propertyName)
       於 System.Management.ManagementBaseObject.GetPropertyValue(String propertyName)
       於 System.Management.ManagementBaseObject.get_Item(String propertyName)
       於 Windows小工具開發團隊.Form1.GetProcessorInfo()
       於 Windows小工具開發團隊.Form1.Form1_Load(Object sender, EventArgs e)
       於 System.EventHandler.Invoke(Object sender, EventArgs e)
       於 System.Windows.Forms.Form.OnLoad(EventArgs e)
       於 System.Windows.Forms.Form.OnCreateControl()
       於 System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
       於 System.Windows.Forms.Control.CreateControl()
       於 System.Windows.Forms.Control.WmShowWindow(Message& m)
       於 System.Windows.Forms.Control.WndProc(Message& m)
       於 System.Windows.Forms.ScrollableControl.WndProc(Message& m)
       於 System.Windows.Forms.ContainerControl.WndProc(Message& m)
       於 System.Windows.Forms.Form.WmShowWindow(Message& m)
       於 System.Windows.Forms.Form.WndProc(Message& m)
       於 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       於 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       於 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

    以上錯誤↑
    ----------我是分隔線-------------
    ㄜ....要找出已使用的RAM不是把全部實體記憶體 - 可用實體記憶體嗎?
    還是有其他方法?
    2009年12月5日 上午 01:30
  •         TextBox1.Text = KB2MB(CLng(AvPhyMem)) ' 顯示可用實體記憶體
            TextBox2.Text = KB2MB(CLng(TotVtMem)) ' 顯示全部虛擬記憶體
            TextBox3.Text = KB2MB(CLng(AvVtNen)) ' 顯示可用虛擬記憶體
            TextBox4.Text = KB2MB(CLng(TotPhyMem) - CLng(AvPhyMem)) ' 顯示 RAM 已用
            Label1.Text = String.Format(CPUrun(CSng(PfmcCounter.NextValue.ToString("#,#0.0"))))

    您函式是用Long和Single,所以都要轉型...
    2009年12月5日 上午 03:00
  • 在 Timer13_Tick 一開始檢查 cptInfo 是否存在,並檢查你的程式碼是否複寫
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2009年12月5日 上午 04:34
  • 在 Timer13_Tick 一開始檢查 cptInfo 是否存在,並檢查你的程式碼是否複寫
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    對不起,心冷&各位,我剛剛仔細檢查後,發現我"並未將物件參考設定為物件的執行個體"錯誤的那段是別段,我已經修正在最上端,麻煩大家再幫我看一下,對不起喔各位!麻煩你們了!
    2009年12月5日 上午 08:52
  • 看唔~

    可是你錯誤訊息明確是指 Timer13_Tick 內: 
    System.NullReferenceException: 並未將物件參考設定為物件的執行個體
       於 Windows小工具開發團隊.Form1.Timer13_Tick(Object sender, EventArgs e)

    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2009年12月5日 上午 09:22
  • 看唔~

    可是你錯誤訊息明確是指 Timer13_Tick 內: 
    System.NullReferenceException: 並未將物件參考設定為物件的執行個體
       於 Windows小工具開發團隊.Form1.Timer13_Tick(Object sender, EventArgs e)

    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    但是我在XP上偵錯時,顯示的錯誤在sno = mo("SerialNumber").ToString.Trim"
    但是用成exe檔後,顯示的錯誤卻在Timer13_Tick,我要信哪個= =還是兩個都是錯誤?
    PS."sno = mo("SerialNumber").ToString.Trim"比Timer13還上面

    那是否能請心冷大大能夠教我怎麼"在 Timer13_Tick 一開始檢查 cptInfo 是否存在,並檢查你的程式碼是否複寫"呢?
    能寫出程式碼嗎?先謝謝了︿"︿
    2009年12月5日 上午 09:48
  • Hi,

    如果把

    Dim sno As String = ""
    
            For Each mo As ManagementObject In mos.Get()
    
                sno = mo("SerialNumber").ToString.Trim
            Next
            mos.Dispose()
            Return sno

    改為

     Dim sno As String = ""
            For Each mo As ManagementObject In mos.Get()
                If mo("SerialNumber") IsNot Nothing Then
                    sno = mo("SerialNumber").ToString.Trim
                    Exit For '如果只要找一個的話.
                End If
            Next
            mos.Dispose()
            Return sno

    有沒有幫助?
    ... 我只會往簡單的方向猜, 猜錯勿怪...

    2009年12月8日 上午 05:10
  • 一般是用
    If IsNothing(cptInfo) Then ...
    來判斷。

    檢查是否複寫,應該是要你查 cptInfo 出現在等號左邊的那幾行的邏輯。

    這種東西可能會因為機器而產生不同的錯誤,比如說不同的 WMI 資料庫並沒有該資訊,造成找不到物件的錯誤。沒硬碟的 SerialNumber 是滿怪的,建議你詳加檢查,看是啥原因無法取得,依據錯誤訊息來查找,或著到微軟下載中心抓 WMI 工具,透過該工具查找是否有該項資訊。
    T.L. Cheng
    • 已標示為解答 龍犽 2009年12月19日 上午 05:07
    2009年12月19日 上午 03:10
    版主