我正在尝试用 C# -MVC# 2008 Express 创建一个小程序,它可以让我远程打开和关闭我负责的 15 台计算机。打开它们很容易,但关闭它们似乎有点问题。
首先,我没有域或 SharePoint,只是 Windows XP 上的一个简单工作组。现在,我设法让 shutdown.exe 工作,但我认为必须有一个 C# 解决方案,所以经过一番搜索后,我发现一些使用 system.management 命名空间的代码效果很好。
这两种解决方案的唯一问题是我需要登录一个相同的管理员帐户,好吧,让我们说不是每个与我一起工作的人都是最精通技术的人,所以让他们使用管理员帐户让我感到紧张。
我不能让他们访问该功能,但我找到了以下代码:
void Shutdown() {
try
{
const string computerName = "PC05"; // computer name or IP address
ConnectionOptions options = new ConnectionOptions();
options.EnablePrivileges = true;
// To connect to the remote computer using a different account, specify these values:
//options.Username = "";
//options.Password = "";
//options.Authority = "ntlmdomain:DOMAIN";
//ManagementScope scope = new ManagementScope("\\\\" + computerName + "\\root\\cimv2", options);
ManagementScope scope = new ManagementScope();
scope.Connect();
SelectQuery query = new SelectQuery("Win32_OperatingSystem");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
foreach (ManagementObject os in searcher.Get())
{
// Obtain in-parameters for the method
ManagementBaseObject inParams = os.GetMethodParameters("Win32Shutdown");
// Add the input parameters.
inParams["Flags"] = 2;
// Execute the method and obtain the return values.
ManagementBaseObject outParams = os.InvokeMethod("Win32Shutdown", inParams, null);
}
}
catch(ManagementException err)
{
MessageBox.Show("An error occurred while trying to execute the WMI method: " + err.Message);
}
catch(System.UnauthorizedAccessException unauthorizedErr)
{
MessageBox.Show("Connection error (user name or password might be incorrect): " + unauthorizedErr.Message);
}
}
但是当我尝试使用它时,我不断收到拒绝访问错误。
“访问被拒绝。(来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED))”} System.Exception {System.UnauthorizedAccessException}
我尝试取消注释密码和用户名(使用我知道正确的管理员帐户的密码和用户名)也取消注释权限。我用了:
options.Impersonation = ImpersonationLevel.Impersonate;
options.Authentication = System.Management.AuthenticationLevel.PacketPrivacy;
但似乎没有任何效果。我不知道我是否需要为此设置一个特殊设置,但就像我说的,如果我登录到另一台机器上使用的管理员帐户,我可以连接和关闭。我目前正在使用备用管理员帐户进行测试。
我读过了:
http://msdn.microsoft.com/en-us/library/aa393613(v=VS.85).aspx
http://msdn.microsoft.com/en-us/library/aa393266(v=VS.85).aspx
http://msdn.microsoft.com/en-us/library/aa389286(v=VS.85).aspx
http://msdn.microsoft.com/en-us/library/aa389290(VS.85).aspx(老实说不太明白这个)
也许它只允许在域中,但我还没有找到任何确认。我想避免添加另一个帐户,所以有什么建议吗?