vc中直接调用dos命令

yzhgr 2005-04-02 03:48:03
CString str;
str="net use p: \\\\192.168.0.21\\d$ 111111 /user:administrator";
ShellExecute(NULL,NULL,str,0,NULL,SW_HIDE);

为什么执行总不能成功?

而如果我在dos命令下执行就可以成功?
...全文
459 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
yzhgr 2005-04-04
  • 打赏
  • 举报
回复
所答非所问
xxrl 2005-04-04
  • 打赏
  • 举报
回复
bool CHistoryServerDlg::ExecuteUnrar(CString strRarPath, CString strSourcePath)
{
//执行压缩文件
//因为rar所在的目录是program files 这个路径有空格,所以cmd执行错误,我就把路径包含在环境变量里面了,所以只有一个rar 下面是格式化dos命令,这也是我试验了很多次才成功的,呵呵
//示例一下,FYI
CString sWinRARInstallPath = "rar";
CString sParameter = "";
sParameter.Format("cmd /c \"%s a -y -ep2 %s %s\"",sWinRARInstallPath,strRarPath,strSourcePath);

LPTSTR CommandLine;
CommandLine = sParameter.GetBuffer(sParameter.GetLength());
sParameter.ReleaseBuffer();
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si,sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi,sizeof(pi));

//Start the child process.
if(!CreateProcess(NULL,
CommandLine,
NULL,
NULL,
false,
CREATE_NO_WINDOW,
NULL,
NULL,
&si,
&pi)
){
perror("调用解压缩程序WINRAR出现错误!");
return false;
}
WaitForSingleObject(pi.hProcess, INFINITE);
DWORD ExitCode;
GetExitCodeThread(pi.hThread, &ExitCode);
AlertErrMessage(ExitCode);
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
return true;
}
bobob 2005-04-04
  • 打赏
  • 举报
回复
重定向输出到文本
bobob 2005-04-04
  • 打赏
  • 举报
回复
{

SECURITY_ATTRIBUTES sa;
HANDLE hRead,hWrite;

sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
if (!CreatePipe(&hRead,&hWrite,&sa,0))
{
MessageBox("Error On CreatePipe()");
return;
}
STARTUPINFO si;
PROCESS_INFORMATION pi;
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hWrite;
si.hStdOutput = hWrite;
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
if (!CreateProcess(NULL,"c:\\winnt\\system32\\cmd.exe /c dir"
,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))
{
DWORD dw = GetLastError();
MessageBox("Error on CreateProcess()");
return;
}
CloseHandle(hWrite);

char buffer[4096] = {0};
DWORD bytesRead;
while (true)
{
if (ReadFile(hRead,buffer,4095,&bytesRead,NULL) == NULL)
break;
m_strResult+= buffer;
UpdateData(false);
Sleep(200);
}
}
yzhgr 2005-04-04
  • 打赏
  • 举报
回复
vcmute()做法正确,但不知道是什么意思?能不能讲讲?

还有就是用ShellExecute执行时怎么才能知道命令执行的结果是成功了还是失败了?
比如我用ShellExecute来执行一个批处理文件,里面有一些dos命令,怎么才能知道里面的命令执行的结果?
kugou123 2005-04-03
  • 打赏
  • 举报
回复
WinExec也可以。

WinExec("delete d:\test.txt",SW_HIDE);
surstar 2005-04-03
  • 打赏
  • 举报
回复
收藏~
柯本 2005-04-03
  • 打赏
  • 举报
回复
如果要隐藏控制台窗口,可用CreateProcess
见我回过的
http://community.csdn.net/Expert/topic/3883/3883795.xml?temp=.2644464
vcmute 2005-04-03
  • 打赏
  • 举报
回复
str="/c net use p: \\\\192.168.0.21\\d$ 111111 /user:administrator";
Practise_Think 2005-04-02
  • 打赏
  • 举报
回复
不好意思,上面的应该不行,因为不能带有空格
Practise_Think 2005-04-02
  • 打赏
  • 举报
回复
CString str;
str="net use p: \\\\192.168.0.21\\d$ 111111 /user:administrator";
ShellExecute(NULL,"open","cmd.exe",str,NULL,SW_HIDE);
yzhgr 2005-04-02
  • 打赏
  • 举报
回复
用system会弹出dos窗口,怎么解决这个问题?
ironox 2005-04-02
  • 打赏
  • 举报
回复
哇,这么简单啊,真神奇。关注一下,回去试试。
oyljerry 2005-04-02
  • 打赏
  • 举报
回复
system()就可以
星辰游侠 2005-04-02
  • 打赏
  • 举报
回复
system("net use p: \\\\192.168.0.21\\d$ 111111 /user:administrator");
星辰游侠 2005-04-02
  • 打赏
  • 举报
回复
同意楼上
ra3 2005-04-02
  • 打赏
  • 举报
回复
用 system 函数

16,551

社区成员

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

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

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