c – 从CreateProcess()执行时,diskpart不能正确处理脚本

前端之家收集整理的这篇文章主要介绍了c – 从CreateProcess()执行时,diskpart不能正确处理脚本前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
diskpart“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()运行时,转换命令都可以工作,但是当它到达时
创建卷,它显示

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

.
.

现在,为了让事情更有趣:
如果第二次从CreateProcess()再次执行脚本(给定磁盘现在已转换并且它为转换comamnds提供了正确的错误),
当它到达创建卷时,它确实有效.

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

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

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,TRUE,&si,&pi ) );

结束原始问题_________________________________________________________

编辑:
更新和更多信息:

>在创建卷命令之前添加了大约15 – 20秒的延迟,仍然得到相同的错误消息.
>此外,将工作分成两个脚本,两个调用
的CreateProcess().在第二个脚本上,只需调用“创建卷”
并分配,它挂了一会儿,然后回来了“这个
命令无法在此时完成“..或者其他东西
影响.
>另一件需要注意的事情:在第一个脚本上,将它们放入
动态,它运行速度比运行速度快两倍
命令提示符.

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

EDIT2
这两个脚本现在正在工作,或者在我再次尝试时工作.不知道为什么它第一次不起作用.

解决方法

因为您的脚本第二次工作似乎最可能的原因是与时序相关 – 在执行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&C++相关文章