我正在使用WMI Volume ManagementObject格式化驱动器(Docs)。如果我尝试从非提升的应用程序执行此操作,我会得到3
(拒绝访问)的结果代码,这是有道理的。以管理员身份运行应用程序意味着我得到18
(未知错误)的返回码。
ManagementObjectSearcher searcher = new ManagementObjectSearcher(
String.Format("select * from Win32_Volume WHERE DriveLetter = \"{0}\"", Drive));
foreach (ManagementObject vi in searcher.Get()) {
FormatResult result = (FormatResult)(int)(uint)vi.InvokeMethod("Format", new object[] { FileSystem, QuickFormat, ClusterSize, Label, EnableCompression });
if (result != FormatResult.Success) {
throw new FormatFailedException(String.Format("{0} (Error code {1})", result.ToString(), (int)result));
}
}
参数:
FileSystem: "NTFS"
Quick: false
ClusterSize: 4096
Label: "Test"
EnableCompression: false
我可以通过资源管理器使用上述参数格式化驱动器,没有任何问题。如何诊断问题并了解发生了什么?
由于似乎存在一些混淆,FormatResult
只是一个简化处理返回代码的枚举...
enum FormatResult {
Success = 0,
UnsupportedFileSystem = 1,
IncompatibleMediaInDrive = 2,
AccessDenied = 3,
CallCanceled = 4,
...
UnknownError = 18
}
要了解我在做什么:
由于文档提到这个方法通常是异步调用的,所以我尝试切换到具有相同结果的Async调用(可根据请求提供代码)。我还尝试了各种FileSystem(NTFS / FAT32),ClusterSize(包括0
以让系统选择默认值)和Quick / Full格式的组合。所有都给出18
的相同结果。
我错过了什么?