1

以下のコードを実行しようとすると、

「値をnullにすることはできません。パラメータ名:タイプ」

実行時のエラー。

この例外を処理する方法と、なぜobjectNameここでnullが発生するのですか?objectNameコンピューターにローカルユーザーアカウントの値を保持することを期待しています。

namespace Users
{
    class EnableDisableUsers
    {
        public static void Main(string[] 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 ");
            }
        }
    }
}

どんな助けでも役に立ちます。

4

1 に答える 1

1

この例外を処理する方法と、ここでobjectNameがnullになる理由を教えてください。

objectNameになることはありませんnull。より可能性の高いシナリオは、そのprog-idが存在しないか、アカウントにアクセス権がないためにnullをType.GetTypeFromProgID(objectName)返すことです。

何が返されるかを確認しType.GetTypeFromProgID(objectName)、それに応じて行動します。それが実際にprog-idであり、そのAPIを正しく使用していることを確認してください。例えば:

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

編集:Activator.CreateInstanceetcはVBScriptのものと同じではないGetObjectことに注意してください。これにアクセスするには、を参照Microsoft.VisualBasic.dllして使用します。

dynamic obj = Microsoft.VisualBasic.Interaction.GetObject(objectName);
于 2012-07-17T08:27:38.767 に答える