T.T*_*.T. 6 c++ windows winapi
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
Run Code Online (Sandbox Code Playgroud)
.
.
从命令提示符运行时: diskpart /s myScript.txt 它按预期工作.
但是,当使用win api运行时CreateProcess(),转换命令都可以工作,但是当它到达时
create volume,它会显示:
"The arguments you specified for this command are not valid"
Run Code Online (Sandbox Code Playgroud)
..
现在,为了让事情变得更有趣:
如果第二次从CreateProcess()再次执行脚本(给定磁盘现在被转换并且它为转换comamnds 提供了正确的错误),当它到达时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 ) );
Run Code Online (Sandbox Code Playgroud)
结束原始问题_________________________________________________________
编辑:
更新和更多信息:
在创建卷命令之前添加了大约15 - 20秒的延迟,仍然得到相同的错误消息.
此外,将工作拆分为两个脚本,两次调用CreateProcess().在第二个脚本,只是调用"创建卷"并分配,它挂了一段时间,然后回来了"此命令无法在此时完成"..或者其他效果.
另外需要注意的是:在第一个脚本中,将它们置于动态状态,与使用命令提示符运行相比,它的运行速度要慢一倍.
也许应该只运行整个事情两次(第二次运行时出错),因为它确实有效
EDIT2
2个脚本现在正在工作,或者在我再次尝试时工作.不知道为什么它第一次不起作用.
create volume因为您的脚本第二次工作,所以最可能的原因似乎是与时间相关——执行命令时卷尚未准备好。
基于该假设:
可以在命令detail disk前添加一条命令create volume来查看磁盘的状态。这将告诉您有关磁盘当前状态的信息。如果磁盘 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1005 次 |
| 最近记录: |