我正在检测我是否正在尝试连接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方法时指定“空白凭据”的正确方法是什么,因为我认为这是潜在的问题?
答案 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
变量是错误的。