このメソッドを呼び出すたびに、クラッシュします。
public bool findSAMAccountByName(string environmentUserName)
{
try
{
const string Domain = "someserver";
// set up domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, Domain);
// find a user
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, environmentUserName);
if (user != null)
{
// do something here....
string samAccountName = user.SamAccountName;
return true;
}
return false;
}
catch (Exception e)
{
e.ToString();
}
return false;
}
内側の例外は言う
{"保護されたメモリの読み取りまたは書き込みを試みました。これは、他のメモリが破損していることを示していることがよくあります。"}
StackTraceは
at System.DirectoryServices.Interop.UnsafeNativeMethods.IAds.GetEx(String bstrName, Object& value)
at System.DirectoryServices.PropertyValueCollection.PopulateList()
at System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry entry, String propertyName)
at System.DirectoryServices.PropertyCollection.get_Item(String propertyName)
at System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInitNoContainer()
at System.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit()
at System.DirectoryServices.AccountManagement.PrincipalContext.Initialize()
at System.DirectoryServices.AccountManagement.PrincipalContext.get_QueryCtx()
at System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithTypeHelper(PrincipalContext context, Type principalType, Nullable`1 identityType, String identityValue, DateTime refDate)
at System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithType(PrincipalContext context, Type principalType, String identityValue)
at System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(PrincipalContext context, String identityValue)
at ActiveRecord.MainWindow.findSAMAccountByName(String environmentUserName) in MainWindow.xaml.cs:line 60
at ActiveRecord.MainWindow..ctor() in MainWindow.xaml.cs:line 39
このメソッドを呼び出すとクラッシュが発生します
if (findSAMAccountByName(Environment.UserName))
{
Console.WriteLine("Username found");
}
コードを削除/コメントすると、コンパイルされて正常に実行されます。
更新:DJKRAZEのアドバイスに従った後
const string Domain = "someserver";
2つの引数を受け入れるようにPrincipalContextを変更した後、新しいStackTraceは
at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)