winapi - 从 shellexecute 中的 cmd 命令捕获错误级别
问题描述
我有批处理脚本,可以在工作网络上创建大约 30 个位置的备份,并且它可以工作。现在我正在编写同一个应用程序,但是在 MFC VC++ 中,所以我使用小技巧在字符串中为 xcopy 设置参数,然后使用ShellExecute
.
m_destination
是来自编辑框的变量,作为目标输入,文件要去哪里。
代码是:
if (m_line1.GetCheck() == BST_CHECKED)
{
temp_dest = _T("/min /c xcopy \"\\\\pc_name.sub_domain.domain.local\\c$\\Users\\Test\\Desktop\\Test\\*.*\" \"") + m_destination + _T("\" /Y /E /Q");
ShellExecute(
GetSafeHwnd(),
L"open", // open edit print
L"C:\\Windows\\System32\\cmd.exe", // FILE PATH,
temp_dest, // PARAMETERS
NULL, // WORKING DIR
SW_HIDE); // WINDOW SHOW HIDE
m_status = "Line 1 - OK\r\n";
}
上面的代码有效,但在某些情况下,当目标 PC 关闭时,在 cmd 窗口中,它会显示“路径已更改或目标无法访问”(类似这样)。在这种情况下, %errorlevel% 有一些价值,如果复制成功完成,还有其他一些价值。然后你有条件向用户触发不同的警告。问题是,我不知道如何捕捉它以指示复制不成功。
我需要某种警告,说明从那台 PC 上的复制没有完成。以这种方式复制后如何检索错误代码?
或者,如果有简单的功能将 copyx 替换为 (*.*) (所有内容)复制,并且能够定向到特定目录,我想听听。
提前致谢。
解决方案
我认为没有一种简单的方法可以做到这一点,ShellExecute
因为它没有给你一个进程句柄。但是,ShellExecuteEx
确实可以通过您传入的结构hProcess
的字段。使用该句柄,您可以等待()然后获取退出代码()。但是,您也可以使用简单的. 还支持一些类似 xcopy 的操作,并为您提供额外的编程控制。SHELLEXECUTEINFO
WaitForSingleObject
GetExitCodeProcess
CreateProcess
SHFileOperation
推荐阅读
- ruby-on-rails - 无法在 Rails 中发出复杂的 SQL 请求
- python - 字符串中的单词等于另一个字符串中单词的排列
- vuejs3 - 执行渲染功能期间未处理的错误
- python - 在 Python 中使用 Tkinter 退出时的消息框对话框
- spring - 为 springdoc/io.swagger.core.v3 "ApiResponse" 指定响应类型
- git - 在 Eclipse Git 中找不到“添加到索引”选项
- java - 如何将 fileStream 转换为 blob 以将其添加到 sql 表中?
- c++ - 在 lambda 中使用仿函数
- python - 在 Pandas 中,如何根据 groupby 标准获取多个子集数据框?
- java - 需要帮助在字符串问题中替换名称(clojure)