2012-07-17 20 views
1
當我嘗試運行,下面的代碼

,我越來越C# - 值不能爲空。參數名:類型

「值不能爲空參數名:鍵入」

運行時錯誤。

如何處理此異常以及爲什麼我的objectName在這裏爲空?我期待objectName在本機上保存本地用戶帳戶的值。

命名空間的用戶 { 類EnableDisableUsers { 公共靜態無效的主要(字串[] args){

 Console.WriteLine("Enter user account to be enabled or disabled"); 
     var user = Console.ReadLine(); 
     Console.WriteLine("Enter E to enable and D to disable the user account"); 
     string enableStr = Console.ReadLine(); 
     bool enable; 
     var computer = "."; 

     if (enableStr.Equals("E") || enableStr.Equals("e")) 
     { 
      enable = true; 

      var objectName = "WinNT://" + computer + "/" + user + ",user"; 
      dynamic objUser = Activator.CreateInstance(Type.GetTypeFromProgID(objectName)); 
      objUser.AccountDisabled = false; 
      objUser.SetInfo(); 
      Console.WriteLine(user + " Enabled = " + result.ToString()); 
      Console.ReadLine(); 
     } 
     else if (enableStr.Equals("D") || enableStr.Equals("d")) 
     { 
      enable = false; 
      var objectName = "WinNT://" + computer + "/" + user + ",user"; 
      dynamic objUser = Activator.CreateInstance(Type.GetTypeFromProgID(objectName)); 
      objUser.AccountDisabled = true; 
      objUser.SetInfo(); 
      Console.WriteLine(user + " Enabled = " + result.ToString()); 
      Console.ReadLine();  
     } 
     else 
     { 
      Console.WriteLine("Operation for " + user + " failed "); 
     } 
    } 
} 

} 任何幫助將是有益的。

+1

您將需要比這張貼更多的代碼。用戶和計算機在哪裏定義? – 2012-07-17 08:14:18

+0

是Type.GetTypeFromProgID(objectName)null? – 2012-07-17 08:15:54

+0

您可能想爲此考慮System.DirectoryServices。請參閱http://msdn.microsoft.com/en-us/library/system.directoryservices.directorysearcher.aspx。你這樣做的方式與你在VBScript中如何做的方式是一致的。您可以使用DirectoryEntry UserFlags屬性設置/取消設置啓用。 – dash 2012-07-17 08:19:03

回答

1

如何處理這個異常,爲什麼我的objectName在這裏是空的?

objectName不會是null。更可能的情況是Type.GetTypeFromProgID(objectName)返回爲空,因爲該prog-id不存在,或者該帳戶無權訪問。

檢查什麼Type.GetTypeFromProgID(objectName)返回,並相應地採取行動。確保它實際上是一個編程代碼,並且您正在正確使用該API。例如:

var type = Type.GetTypeFromProgID(objectName); 
if(type == null) throw new InvalidOperationException(
    "Invalid prog-id: " + objectName); 
dynamic objUser = Activator.CreateInstance(type); 

編輯:請注意,Activator.CreateInstance等是一樣VBScript的GetObject。要訪問,參考Microsoft.VisualBasic.dll,並使用:

dynamic obj = Microsoft.VisualBasic.Interaction.GetObject(objectName); 
+0

程序編號無效:WinNT://./John,user。這是什麼prog-id返回。爲什麼用戶John沒有被羣組用戶調用? – user1528803 2012-07-17 08:46:15

+0

@ user1528803回答這個問題,我需要看看它說*應該*的工作... – 2012-07-17 11:43:01

+0

@ user1528803另請參閱我更新的答案 – 2012-07-17 11:50:36

相關問題