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

时间:2014-12-24 15:08:49

标签: c# wmi

我正在检测我是否正在尝试连接localhost,以及创建(或不创建)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上对localhost执行工作正常。

在针对localhost调用WMI方法时指定“空白凭据”的正确方法是什么,因为我认为这是潜在的问题?

2 个答案:

答案 0 :(得分:2)

我在我的本地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);
        }

答案 1 :(得分:2)

  

上面的代码抛出了错误代码24的异常

这与您在问题标题中提到的错误没有任何关系。 Win32_Share.Create方法的错误代码记录在this MSDN article中。返回值24表示"未知设备或目录"。

换句话说,您的pathName变量是错误的。