【问题标题】:Initialize and partition disk - how to prevent "you need to format disk" message from appearing?初始化和分区磁盘 - 如何防止出现“您需要格式化磁盘”消息?
【发布时间】:2013-02-19 03:38:18
【问题描述】:

我正在尝试从应用程序初始化、分区和格式化磁盘。操作系统是 Windows Server 2008 R2。我对这些任务使用哪种方法并不重要,但假设我使用的是 DeviceIoControl API。

一旦应用程序初始化并创建了一个分区,Windows 就会弹出一个消息框说“你需要格式化磁盘...

"

所以,即使我的应用程序立即格式化此磁盘,消息框仍然存在,用户会感到困惑,实际上可以再次格式化它。

有没有办法阻止 Windows 弹出该消息框?

【问题讨论】:

标签: .net windows format partitioning


【解决方案1】:

看起来情况比我原本想的要复杂一些。让我在这里解释一下我的发现,可能对其他人有用。

初始化和格式化驱动器的方式确实很重要。例如,以下 diskpart 脚本将执行所有操作,而 Windows 不会弹出该消息:

select disk 2
create partition primary
select part 1
format fs=ntfs label="NEW DISK" quick
assign letter Z
exit

如果您尝试先分配字母,然后执行格式化 - 将出现消息。

但就我而言,我不想依赖于 diskpart。我使用 DeviceIoControl API 初始化和分区磁盘,然后等待 WMI 识别卷,因此我可以通过 WMI 格式化它。

不幸的是,锁定装置也不是一种选择。因为如果我这样做,WMI 将无法识别该卷。

基于这个答案How to create a partition without Windows assigning a drive letter? 我决定停止和启动 ShellHWDetection 服务,它实际上很完美。

【讨论】:

  • 出于好奇,为什么前两步使用 DeviceIoControl 而不是格式化卷?
  • 无法使用 WMI 对磁盘进行初始化和分区。所以我不得不选择 DeviceIoControl。我找不到使用 DeviceIoControl 格式化卷的简单方法,而 WMI 似乎是一种简单的方法。
  • 您说的很对,似乎没有控制代码来格式化卷。大鼠。我想,一个有趣的问题是,diskpart 在创建分区时做了什么不同的事情,以防止 shell 在分配驱动器号之前检测到卷。
  • diskpart 在创建分区后以某种方式自动获取卷,并且使用 DeviceIoControl 我无法直接获取此卷。我不得不等到它出现在 WMI 堆栈中。
  • 我认为“正确”的解决方案是 VDS,现在我认为它是 diskpart 使用的。见msdn.microsoft.com/en-us/library/bb986750%28v=vs.85%29.aspx
猜你喜欢
  • 1970-01-01
  • 2015-07-02
  • 2013-10-01
  • 1970-01-01
  • 2021-08-02
  • 1970-01-01
  • 2012-02-25
  • 2013-10-11
  • 1970-01-01
相关资源
最近更新 更多