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