WMI Win32_Share.通过服务器操作系统上的 WMI 在本地主机上创建方法给出错误代码 24
本文关键字:WMI 主机 创建 方法 错误代码 Share Win32 操作系统 服务器 | 更新日期: 2023-09-27 18:35:17
我正在检测我是否正在尝试与本地主机建立连接,并创建(或不创建)WMI 连接选项,如下所示:
if (NetworkUtils.IsLocalIpAddress(machineName))
{
_scope = new ManagementScope(string.Format(@"''{0}'root'cimv2", machineName));
}
else
{
_connectionOptions = new ConnectionOptions
{
Username = username,
Password = password,
Impersonation = ImpersonationLevel.Impersonate
};
_scope = new ManagementScope(string.Format(@"''{0}'root'cimv2", machineName), _connectionOptions);
}
当我在任何一种情况下打电话给_scope.Connect()
时,它都可以工作。也就是说,没有例外,IsConnected
是真的。
但是,当我尝试在本地情况下调用方法(例如Win32_Share.Create
)时,我会收到错误。以下代码始终适用于我的远程连接:
var winSharePath = new ManagementPath("Win32_Share");
var winShareClass = new ManagementClass(_scope, winSharePath, null);
var shareParams = winShareClass.GetMethodParameters("Create");
shareParams["Path"] = pathName.TrimEnd('''');
shareParams["Name"] = shareName;
shareParams["Type"] = 0;
shareParams["Description"] = "CMC Bootstrap Share";
var outParams = winShareClass.InvokeMethod("Create", shareParams, null);
if ((uint) (outParams.Properties["ReturnValue"].Value) != 0)
{
throw new Exception("Unable to share directory. Error code: " +
outParams.Properties["ReturnValue"].Value);
}
我在调用此方法之前创建了 pathName
目录,因此我保证在所有情况下都存在pathName
。
当仅在Windows Server 2008和2012上本地执行时,上面的代码会抛出异常,错误代码为24。在Windows 8上对本地主机执行就可以了。
在对本地主机调用WMI方法时指定"空白凭据"的正确方法是什么,因为我认为这是根本问题?
我在本地PC上尝试了下面的代码,这有效(共享我的临时文件夹)。你能试试同样的吗?另外,您正在使用的补丁和共享名称是什么?
string pathName = @"c:'temp'";
string shareName = "tempFolder";
var scope = new ManagementScope(string.Format(@"''{0}'root'cimv2", "localhost"));
// your code below
var winSharePath = new ManagementPath("Win32_Share");
var winShareClass = new ManagementClass(scope, winSharePath, null);
var shareParams = winShareClass.GetMethodParameters("Create");
shareParams["Path"] = pathName.TrimEnd('''');
shareParams["Name"] = shareName;
shareParams["Type"] = 0;
shareParams["Description"] = "CMC Bootstrap Share";
var outParams = winShareClass.InvokeMethod("Create", shareParams, null);
if ((uint)(outParams.Properties["ReturnValue"].Value) != 0)
{
throw new Exception("Unable to share directory. Error code: " +
outParams.Properties["ReturnValue"].Value);
}
上面的代码抛出异常,错误代码为 24
这与您在问题标题中提到的错误没有任何关系。 Win32_Share.创建方法的错误代码记录在此 MSDN 文章中。 返回值 24 表示"未知设备或目录"。
换句话说,您的pathName
变量是错误的。