2012-09-21 7 views
0

WMI를 사용하여 로컬 디스크 정보를 얻는 코드는 아래 코드에서 얻었습니다 (내가 배운 다른 사이트에서 가져옴). 어쨌든 모든 레이블과 콤보 상자를 만들었고 콤비는 잘 작동합니다. 컴퓨터에 로컬 디스크가 표시됩니다.레이블이 아무것도 표시되지 않습니다.

그러나 디스크를 선택한 WMI에서 다시 가져 와서 표시하면 레이블 옆에 아무 것도 표시되지 않습니다. WMI는 get-wmiobjects를 표시하기 위해 powershell을 사용할 수 있고, 다시 가져오고있는 두 객체는 ​​실제로 powershell을 통해 무언가를 보여줄 수 있기 때문에 잘 작동합니다 ....이 응용 프로그램에는 없습니다.

아이디어가 있으십니까?

namespace diskdrive_info 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      //Get all the disk drives 
      ManagementObjectSearcher mosDisk = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive"); 
      // Loop through each object (disk) retrieved by WMI 
      foreach (ManagementObject moDisk in mosDisk.Get()) 
      { 
       cmbHdd.Items.Add(moDisk["Model"].ToString()); 
      } 
     } 

     private void cmbHdd_SelectedIndexChanged(object sender,EventArgs e) 
     { 
      ManagementObjectSearcher mosDisks = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE Model = '" + cmbHdd.SelectedItem + "'"); 
      foreach (ManagementObject moDisk in mosDisks.Get()) 
      { 
       lblType.Text = "Type:" + moDisk["MediaType"].ToString(); 
       lblModel.Text = "Model: " + moDisk["Model"].ToString(); 
      } 
     } 


    } 
} 

답변

1

foreach가 몇 번 실행됩니까? mosDisks.Get() 컬렉션에 요소가 있기 때문에 .Text 속성을 여러 번 쓰는 것처럼 보입니다. 그 루프에서 .Get()가 비어 있거나 null이 될 가능성이 있습니까?

레이블에 "유형 :"및 "모델 :"이 표시되어 있습니까? ... 그것을 알아 냈다

또한 큰소리로 우는위한

moDisk["MediaType"].ToString() 
+0

안녕하세요 - (MediaType에서) 비트에 중단 점을 넣고 (F11) 통해 단계를 수행하고 프로그램이 Form1_Load 끝에 중지합니다. 그것은 심지어 cmbHdd_SelectedIndexChanged를 보지 않습니다 ... Form1_Load의 첫 번째 foreach가 두 번 통과 한 다음 winform을 표시했습니다. – lara400

+0

중단 점이 발생할 때 cmbHdd.SelectedItem이 무엇인지 알고 있습니까? 또한 콤보에 무언가를 추가하면 selectedIndexChanged 이벤트가 실행될 수 있습니다. – Bmo

+0

죄송합니다 - 디버거가 "개인 무효 cmbHdd_SelectedIndexChanged (개체 발신자, EventArgs 전자)"공격하지 않습니다 - 그 전에 끝납니다. 아마 저와 cr @ p 디버깅 기술을 가지고 있지만 저에게 그것은 프로그램이 심지어 cmbHdd_SelectedIndexChanged에 도착하지 않는 것 같아요. 당신이 언급 한 cmbHdd.SelectedItem이 있습니다. 왜 다른 부분에 충돌하지 않는지는 알 수 없습니다. 코드 ... – lara400

0

다시 오는 것을보기 위해 foreach 문에 중단 점에 넣어보십시오! 그것은 내가 네트워크 드라이브에서 스크립트를 실행했다는 사실이었고 스크립트 VS를로드했을 때이 위치에서 실행하는 데 보안 위험이 있다는 것을 알리는 오류가 발생했다는 것을 알았습니다 .... 그래서 나는 그것을 C : 드라이브로 옮겼습니다. 헤이 프레스토 모두 괜찮아!

관련 문제