星期一, 9月 27, 2010

無法用WMI遠端連線到未加入網域XP電腦

Wmi 遠端連線到電腦時,有時候會常常access deny出現!
當然有可能是你帳號打錯(自作孽ㄟ( ̄□ ̄ )ㄏ)

我測試了WIN2003、2008、XP、Win7 。XP的電腦卻大部分都無法連線成功!

大部分出現的訊息都是︰
2010年9月27日 PM 12:36:36 - 連線到192.168.1.112發生錯誤,錯誤訊息:存取被拒。 (發生例外狀況於 HRESULT: 0x80070005 (E_ACCESSDENIED))
2010年9月27日 PM 12:37:33 - 連線到192.168.1.112發生錯誤,錯誤訊息:存取被拒。 (發生例外狀況於 HRESULT: 0x80070005 (E_ACCESSDENIED))
雖然之前就在MSDN裡面有大概喵了一下WMI的架構,及遠端連線的Security,參考自︰
Dcom的權限設定,WMI的權限設定
結果還是不OK,碰到XP就是掛掉,試了快兩天還是Deny狂出現
一直以為是程式碼的問題,將以下的Com設定也按照msdn security的方法去試,結果還是失敗

//取得或設定 COM 模擬等級
remoteCon.Impersonation = ImpersonationLevel.Impersonate;
//如果為NULL,則已電腦的網域為預設值
remoteCon.Authority = "ntdlmdomain:domain"; 
//取得或設定 COM 驗證等級,以使用於這個連接中的作業。
remoteCon.Authentication = AuthenticationLevel.PacketPrivacy;
//指出是否需要為連接作業啟用使用者權限。在執行的作業需要啟用某些使用者權限時 (例如,電腦重新開機) 才應該使用這個屬性。 
 remoteCon.EnablePrivileges = true;

星期二, 9月 21, 2010

ScrollBar在 DataGridView能顯現

程式好弱.......一堆東西看完書還是不懂的運用!!
廢話不多說.....我只會抱怨@@

最近在做datatable裡的資料binding到datagridview上,
由於資料會更新, 所以必須隨時Update到datagridview上,
但是又不想UI Thread卡死,
所以用新Thread去跑data,要更新時再去Invoke,讓主執行緒能更新畫面

 //對控制項更新狀態
        delegate void UpdateGridViewlHandle();
        delegate void UpdateLabellHandle(int over,int count);
        private void UpdateGridView()
        {
            customDataGridView1.Refresh();
        }
        private void UpdateLabel(int over,int count)
        {
            stateLabel.Text = "處理中…,失敗 "+getFailed+" 筆…";
        } 

星期一, 9月 13, 2010

讀取Registry Value(WMI)

 這邊要順便紀錄如何使用WMI呼叫Method

  • 先建立連線 Remote 連線

//建立遠端連線
ConnectionOptions remoteCon = new ConnectionOptions();
remoteCon.Username =Account;
remoteCon.Password = Password;
//如果為NULL,則已電腦的網域為預設值
//remoteCon.Authority = "ntdlmdomain:DOMAIN"; 
//取得或設定 COM 驗證等級,以使用於這個連接中的作業。
remoteCon.Authentication = AuthenticationLevel.PacketPrivacy;
//指出是否需要為連接作業啟用使用者權限。在執行的作業需要啟用某些使用者權限時 (例如,電腦重新開機) 才應該使用這個屬性。 
remoteCon.EnablePrivileges = true;