gpt4 book ai didi

c++ - 从 CreateProcess() 执行时,diskpart 无法正确处理脚本

转载 作者:可可西里 更新时间:2023-11-01 13:22:43 24 4
gpt4 key购买 nike

磁盘部分“myScript.txt”:

select disk 1
convert dynamic noerr
select disk 2
convert dynamic noerr
create volume stripe disk=1,2 noerr
assign letter=X noerr

.
.

从命令提示符运行时:diskpart/s myScript.txt 它按预期工作

但是,当使用 win api 的 CreateProcess() 运行时,这两个转换命令确实工作但是当它到达
create volume,它显示:

"The arguments you specified for this command are not valid"

..

现在,让事情变得更有趣:
如果脚本再次从 CreateProcess() 执行第二次(假设磁盘现在已转换并且它为转换命令提供了一个正确的错误),当它到达 create volume 时,它确实起作用了。

这让我觉得它与磁盘和/或可执行文件有关?

在正确方向上的任何一点都值得赞赏,因为这非常令人困惑。谢谢。

STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
ZeroMemory(&pi, sizeof(pi));
si.cb = sizeof(si);
strncpy( command, "diskpart.exe /s myScript.txt", (sizeof(command) - 1) );

CreateProcess( "c:\\WINDOWS\\system32\\diskpart.exe",
command,
NULL,
NULL,
TRUE,
0,
NULL,
NULL,
&si,
&pi ) );

结束原始问题____________________________________________________________

编辑:
更新和更多信息:

  • 在创建卷命令之前添加了大约 15 - 20 秒的延迟,仍然收到相同的错误消息。

  • 此外,将工作分成两个脚本,两次调用创建过程()。在第二个脚本中,只调用“create volume”并分配,它挂了一会儿然后回来了“这个此时无法完成命令”。效果。

  • 还有一点要注意:在第一个脚本中,将它们放入动态的,它的运行速度大约是运行速度的两倍命令提示符。

也许应该只运行整个程序两次(第二次运行时出错),因为它确实有效

EDIT2
这 2 个脚本现在正在运行,或者在我再次尝试时运行。不确定为什么它第一次不起作用。

最佳答案

因为您的脚本在第二次运行时看起来最可能的原因是时间相关——在执行 create volume 命令时卷还没有准备好。

基于该假设:

您可以在create volume 命令之前添加一个detail disk 命令来了解磁盘的状态。这将告诉您有关磁盘当前状态的一些信息。如果磁盘 2 没有显示任何有趣的内容,也选择第一个磁盘以显示其详细信息。您从中获得的信息可能会对您有所帮助。

至于实际解决问题,通过使磁盘联机和脱机来引入延迟可能会有所帮助。例如:

select disk 1
convert dynamic
select disk 2
convert dynamic
select disk 1
offline disk
select disk 2
offline disk
select disk 1
online disk
select disk 2
online disk
create volume stripe disk=1,2
assign letter=X

关于c++ - 从 CreateProcess() 执行时,diskpart 无法正确处理脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27865960/

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