如何使用PrincipalContext关闭到远程主机的连接
本文关键字:主机 连接 程主机 PrincipalContext 何使用 | 更新日期: 2023-09-27 18:10:57
当我执行这段代码时,
PrincipalContext oPrincipalContext = new PrincipalContext(
ContextType.Machine,
computer.Name,
null,
ContextOptions.Negotiate,
Settings.UserName,
Settings.UserPassword))
GroupPrincipal oGroupPrincipal = GroupPrincipal.FindByIdentity(
oPrincipalContext,
Settings.AdministratorsGroup);
创建到远程计算机的连接。我可以看到它在cmd.exe中写"net use"。
但是我不知道在关闭我的应用程序之前如何关闭这个连接。
当我退出应用程序时,它会自动关闭。
方法如下:
public Dictionary<Principal, ComputerPrincipal>
GetMembersOfAdministratorsGroup(ComputerPrincipal computer)
{
var usersList = new Dictionary<Principal, ComputerPrincipal>();
var tempUsersList = new Dictionary<string, Principal>();
using (PrincipalContext oPrincipalContext =
new PrincipalContext(
ContextType.Machine,
computer.Name,
null,
ContextOptions.Negotiate,
Settings.UserName,
Settings.UserPassword))
{
using (GroupPrincipal oGroupPrincipal =
GroupPrincipal.FindByIdentity(
oPrincipalContext,
Settings.AdministratorsGroup))
{
if (oGroupPrincipal != null)
{
var result = oGroupPrincipal.GetMembers();
foreach (Principal user in result)
{
if (!tempUsersList.ContainsKey(user.Name))
{
tempUsersList.Add(user.Name, user);
usersList.Add(user, computer);
}
}
}
}
}
return usersList;
}
PrincipalContext
和GroupPrincipal
实现了IDisposable
。确保在使用后立即处理掉它们(当然在再次尝试连接之前)。这应该可以解决问题。例如
: -
using(PrincipalContext oPrincipalContext = new PrincipalContext(ContextType.Machine, computer.Name, null, ContextOptions.Negotiate, Settings.UserName, Settings.UserPassword))
using(GroupPrincipal oGroupPrincipal = GroupPrincipal.FindByIdentity(oPrincipalContext, Settings.AdministratorsGroup))
{
// perform operations here
}
或手写:-
PrincipalContext oPrincipalContext = new PrincipalContext(ContextType.Machine, computer.Name, null, ContextOptions.Negotiate, Settings.UserName, Settings.UserPassword);
try
{
GroupPrincipal oGroupPrincipal = GroupPrincipal.FindByIdentity(oPrincipalContext, Settings.AdministratorsGroup);
try
{
// perform operations here
}
finally
{
oGroupPrincipal.Dispose();
}
}
finally
{
oPrincipalContext.Dispose();
}
PrincipalContext是不可能的。您是否尝试调用Dispose或将代码放在using块中?