gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:45:53 24 4
gpt4 key购买 nike

我正在检测我是否正在尝试与本地主机建立连接,并创建(或不创建)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);
}

关于c# - WMI Win32_Share.Create 方法在本地主机上通过服务器操作系统上的 WMI 给出错误代码 24,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27638854/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com