关于调用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问题这么简单,请高手指点!!

谢谢!!
...全文
2725 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jimette 2013-03-13
  • 打赏
  • 举报
回复
您好, 由于您长时间不结贴,上一次答复已超一个月。 目前暂无最佳答案,本人帮你顶贴。 另外可以放在本版的疑难杂症帖链接: http://bbs.csdn.net/topics/390351579。 如果您有什么意见,请您联系我。
vfe 2012-09-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
能不能CreateProcess中命令是cmd.exe,参数是到'manage-bde.exe' ?
[/Quote]

该方法试过之后才改用直接调用.bat文件的方法的!用该方法的结果是没有任何反应,直接返回“false”。
schlafenhamster 2012-09-02
  • 打赏
  • 举报
回复
能不能CreateProcess中命令是cmd.exe,参数是到'manage-bde.exe' ?
schlafenhamster 2012-09-02
  • 打赏
  • 举报
回复
能不能CreateProcess中命令是cmd.exe,参数是到'manage-bde.exe' ?
vfe 2012-08-31
  • 打赏
  • 举报
回复
cmd也试过,加入完整路径C:\windows\system32\manage-bde.exe .......也试过。

问题是为什么直接双击.bat文件没问题,而用createprocess调用却有问题?而.bat文件的内容改成ping www.163.com也没问题。由于manage-bde.exe是在系统目录里面,默认是不用加路径的。直接双击.bat文件能执行就已经证明了。

希望有高手知道win7的bitlocker的,用过的,也尝试一下,能找出原因,谢谢!!!
Gloveing 2012-08-31
  • 打赏
  • 举报
回复
'manage-bde.exe'不是内部或外部命令,也不是可运行的程序
或批处理文件。
=================
这个错误很明显嘛。。找不到'manage-bde.exe',应该是路径出问题,使用绝对路径
(你的bat和这个manage-bde.EXE应该是在一个目录下吧,点击bat可以直接运行,但是你的B.exe和manage-bde.EXE不在意路径下?当你的程序B在CreateProcess的时候,就不对了)

或者把这几个都放在同一目录下

16,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧