关于调用bat批处理manage-bde的问题,或许是高手中的高手才能解决的问题
vfe 2012-08-31 04:33:54 在win7下,进行驱动器加锁,为了图方便解锁,做了个批处理文件unlock.bat
内容是:manage-bde -unlock g: -rp 326000-202006-900200-039038-535898-009303-683253-581356
该行bat用手动双击.bat文件可以正常解锁。
为了更方便,试图开机运行时自动调用exe文件,采用createprocess解决,如下:
SECURITY_ATTRIBUTES sa;
HANDLE hRead,hWrite;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
if (!CreatePipe(&hRead,&hWrite,&sa,0))
{
return FALSE;
}
STARTUPINFO si;
PROCESS_INFORMATION pi;
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hWrite;
si.hStdOutput = hWrite;
si.wShowWindow = SW_SHOW;
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
//关键步骤,CreateProcess函数参数意义请查阅MSDN
if(!CreateProcess(NULL, EXECDOSCMD ,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))
{
AfxMessageBox("false");
return FALSE;
}
CloseHandle(hWrite);
char buffer[4096] = {0};
DWORD bytesRead;
while (true)
{
if (ReadFile(hRead,buffer,4095,&bytesRead,NULL) == NULL)
break;
//buffer中就是执行的结果,可以保存到文本,也可以直接输出
AfxMessageBox(buffer);
Sleep(200);
}
return TRUE;
运行结果是
****************************************
C:\>manage-bde -unlock g: -rp
326000-202006-900200-039038-535898-009303-683253-581356
'manage-bde.exe'不是内部或外部命令,也不是可运行的程序
或批处理文件。
****************************************
假如bat文件内容改为ping www.139.com
结果是
****************************************
正在 Ping 163.xdwscache.glb0.lxdns.com [121.14.228.43] 具有 32 字节的数据:
来自 121.14.228.43 的回复: 字节=32 时间=11ms TTL=55
来自 121.14.228.43 的回复: 字节=32 时间=11ms TTL=55
来自 121.14.228.43 的回复: 字节=32 时间=10ms TTL=55
来自 121.14.228.43 的回复: 字节=32 时间=11ms TTL=55
121.14.228.43 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 10ms,最长 = 11ms,平均 = 10ms
****************************************
首先自己捣鼓了半天,先否定了路径问题。
可能有人会说直接开机运行bat不就行了,因为想把密码放到别的地方,而不是放在bat里面,所以还是希望能用exe调用来解决。也可能有人会说直接调用manage-bde.exe不就解决了,也尝试了半天,后来放弃了,而改用直接调用bat的比较简单的办法。
或许本问题不是VC问题这么简单,请高手指点!!
谢谢!!