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方法时指定"空白凭据"的正确方法是什么,因为我认为这是根本问题?

WMI Win32_Share.通过服务器操作系统上的 WMI 在本地主机上创建方法给出错误代码 24

我在本地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变量是错误的。