在windows中,启动一个进程可以使用API ShellExecute来实现,详细参数可参考MSDN获悉。
#ifdef Q_OS_WIN
#include
#endif
#ifdef Q_OS_WIN/** 以下代码为宽字符,若改变字符集会导致编译不过,需将wstring换为string */
std::wstring operate = QString("runas").toStdWString();//临时提升管理员权限
std::wstring path = QCoreApplication::applicationDirPath().toStdWString();
std::wstring file= QString(QCoreApplication::applicationDirPath()+"/regSms.exe").toStdWString();
int ret = (int)ShellExecute(NULL,operate.c_str(),file.c_str(),NULL,path.c_str(),SW_SHOWNORMAL);
QString sRet = QString("未知");
switch(ret)
{
case 0:
sRet = QString("内存不足");
break;
case 2:
sRet = QString("文件名错误");
break;
case 3:
sRet = QString("路径名错误");
break;
case 11:
sRet = QString("exe文件无效");
break;
case 26:
sRet = QString("发生共享错误");
break;
case 27:
sRet = QString("文件名不完全或无效");
break;
case 28:
sRet = QString("超时");
break;
case 29:
sRet = QString("DDE事务失败");
break;
case 30:
sRet = QString("正在处理其它DDE而不能完成该DDE");
break;
case 31:
sRet = QString("没有相关联的应用程序");
break;
default:
sRet = QString("未知");
break;
}
if(ret > 32)//返回值大于32表示ShellExecute执行成功
QMessageBox::information(this,G2U("提示"),G2U("执行成功:\n"));
else
QMessageBox::warning(this,G2U("警告"),G2U("执行失败【%1】!").arg(sRet));
return ;
#else
QMessageBox::warning(this,G2U("警告"),G2U("短信猫仅在windows系统下可用!"));
return ;
#endif
另外附上,Windows系统常见错误代码:
0000 操作已成功完成。
0001 错误的函数。
0002 系统找不到指定的文件。
0003 系统找不到指定的路径。
0004 系统无法打开文件。
0005 拒绝访问。
0006 句柄无效。
0007 存储区控制块已损坏。
0008 可用的存储区不足,无法执行该命令。
0009 存储区控制块地址无效。
0010 环境错误。
0011 试图使用不正确的格式加载程序。
0012 访问代码无效。
0013 数据无效。
0014 可用的存储区不足,无法完成该操作。
0015 系统找不到指定的驱动器。
0016 无法删除该目录。
0017 系统无法将文件移到其他磁盘驱动器上。
0018 没有其他文件。
0019 媒体写保护。
0020 系统找不到指定的设备。
0021 设备尚未准备好。
0022 设备无法识别该命令。
0023 数据错误(循环冗余检查)。
0024 程序发出命令,但是该命令的长度错误。
0025 驱动器在磁盘上无法定位指定的区域或磁道。
0026 无法访问指定的磁盘或软盘。
0027 驱动器找不到所请求的扇区。
0028 打印机缺纸。
0029 系统无法写入指定的设备。
0030 系统无法读取指定的设备。
0031 与系统连接的设备不能正常运转。
0032 其他进程正使用该文件,因此现在无法访问。
0033 另一进程已锁定该文件的某一部分,因此现在无法访问。
0034 驱动器中的软盘不正确。请将 %2 (卷标序列号: %3)插入驱动器 %1。
0036 打开共享的文件太多。
0038 已到达文件结尾。
0039 磁盘已满。
0050 不支持此网络请求。
0051 远程计算机无法使用。
0052 网络中存在重名。
0053 找不到网络路径。
0054 网络正忙。
0055 指定的网络资源或设备已不可用。
0056 已经达到网络命令的极限。
0057 网络适配器出现错误。
0058 指定的服务器无法执行所请求的操作。
0059 网络出现意外错误。
0060 远程适配器不兼容。
0061 打印机队列已满。
0062 服务器上没有存储等待打印的文件的空间。
0063 已经删除等候打印的文件。
0064 指定的网络名无法使用。
0065 拒绝访问网络。
0066 网络资源类型错误。
0067 找不到网络名。
0068 已超过本地计算机网络适配器卡的名称极限。
0069 已超过网络 BIOS 会话的极限。
0070 远程服务器已经暂停或者正在启动过程中。
0071 由于该计算机的连接数目已达到上限,此时无法再连接到该远程计算机。
0072 指定的打印机或磁盘设备已经暂停。
0080 该文件存在。
0082 无法创建该目录或文件。
0083 INT 24 失败。
0084 处理该请求的存储区不可用。
0085 正在使用该本地设备名。
0086 指定的网络密码不正确。
0087 参数错误。
0088 网络出现写入错误。
0089 此时系统无法启动其他进程。
0100 无法创建其他系统标志。
0101 属于其他进程的专用标志。
0102 标志已经设置,无法关闭。
0103 无法再次设置该标志。
0104 中断时无法请求专用标志。
0105 此标志先前的所有权已终止。
0106 请将软盘插入驱动器 %1。
0107 后续软盘尚未插入,程序停止。
0108 磁盘正在使用或已由其他进程锁定。
0109 管道已经结束。
0110 系统无法打开指定的设备或文件。
0111 文件名太长。
0112 磁盘空间不足。
0113 没有其他可用的内部文件标识符。
0114 目标内部文件标识符不正确。
0117 该应用程序所运行的 IOCTL 调用不正确。
0118 校验写入的开关参数值不正确。
0119 系统不支持所请求的命令。
0120 该系统上不支持此功能。
0121 标记已超时。
0123 文件名、目录名或卷标语法错误。
0124 系统调用层不正确。
0125 磁盘没有卷标。
0126 找不到指定的模块。
0127 找不到指定的过程。
0128 没有要等候的子进程。
0129 模式下运行。
0130 试图使用操作(而非原始磁盘I/O)的已打开磁盘分区的文件句柄。
0131 试图将文件指针移至文件开头之前。
0132 无法在指定的设备或文件中设置文件指针。
0133 对于包含已连接驱动器的驱动器,不能使用 JOIN 或 SUBST 命令。
0134 试图在已经连接的驱动器上使用 JOIN 或 SUBST 命令。
0135 试图在已经替换的驱动器上使用 JOIN 或 SUBST 命令。
0136 系统试图删除尚未连接的驱动器的 JOIN。
0137 系统试图删除尚未替换的驱动器的替换项。
0138 系统试图将驱动器连接到已连接的驱动器下的目录。
0139 系统试图将驱动器替换成已替换的驱动器下的目录。
0140 系统试图将驱动器连接到已替换的驱动器的一个目录中。
0141 系统试图将驱动器替换成到已连接的驱动器下的目录。
0142 此时系统无法运行 JOIN 或 SUBST。
0143 系统无法将驱动器连接到或替换成同一驱动器下的目录。
0144 此目录不是该根目录的子目录。
0145 该目录未清空。
0146 指定的路径已经在替换中使用。
0147 资源不足,无法执行该命令。
0148 此时无法使用指定的路径。
0149 试图连接或替换某个驱动器目录,该驱动器上的某个目录是上一次替换的目标目录。
0150 CONFIG.SYS 文件未指定系统跟踪信息,或禁止跟踪。
0151 DosMuxSemWait 的指定信号事件的数目不正确。
0152 DosMuxSemWait 没有运行;已经设置太多的标志。
0153 DosMuxSemWait 列表不正确。
0154 输入的卷标超过目标文件系统的标号字符长度极限。
0155 无法创建其他线程。
0156 接收进程拒绝该信号。
0157 已经放弃该区域,因此无法锁定。
0158 该区域已经解除锁定。
0159 线程标识符的地址错误。
0160 传到 DosExecPgm 的参数字符串错误。
0161 指定的路径无效。
0162 信号已挂起。
0164 系统无法创建其他线程。
0167 无法锁定文件的范围。
0170 所要求的资源正在使用中。
0173 锁定请求对于提供的取消区域不重要。
0174 文件系统不支持到锁定类型的自动更改。
0180 系统检测到错误的区域号码。
0182 操作系统无法运行 %1。
0183 不能创建已经存在的文件。
0186 传送的标志不正确。
0187 找不到指定的系统信号名称。
0188 操作系统无法运行 %1。
0189 操作系统无法运行 %1。
0190 操作系统无法运行 %1。
0191 无法在 Win32 模式下运行 %1。
0192 操作系统无法运行 %1。
0193 %1 不是有效的 Win32 应用程序。
0194 操作系统无法运行 %1。
0195 操作系统无法运行 %1。
0196 操作系统无法运行此应用程序。
0197 当前无法配置操作系统运行此应用程序。
0198 操作系统无法运行 %1。
0199 操作系统无法运行此应用程序。
0200 代码段应小于 64K。
0201 操作系统无法运行 %1。
0202 操作系统无法运行 %1。
0203 系统找不到输入的环境选项。
0205 在命令子树中的进程没有信号句柄。
0206 文件名或扩展名太长。
0207 环 2 堆栈正在使用中。
0208 输入的全局文件名字符 * 或 ? 不正确,或指定的全局文件名字符太多。
0209 所发送的信号不正确。
0210 无法设置信号处理程序。
0212 区域已锁定,无法重新分配。
0214 附加到此程序或动态链接模块的动态链接模块太多。
0215 无法嵌套调用 LoadModule。
0216 图像文件 %1 有效,但不适用于本机类型。
0230 管道状态无效。
0231 所有的管道实例都处于忙状态。
0232 管道正在关闭。
0233 在管道的另一端没有进程。
0234 有更多可用的数据。
0240 已取消会话。
0254 指定的扩展属性名无效。
0255 扩展属性不一致。
0258 等待操作过时。
0259 没有其他可用数据。
0266 无法使用复制功能。
0267 目录名无效。
0275 扩展属性不匹配缓冲区。
0276 所装载的文件系统上的扩展属性文件已被损坏。
0277 扩展属性表格文件已满。
0278 指定的扩展属性句柄无效。
0282 安装的文件系统不支持扩展属性。
0288 试图释放不属于调用者的多路同步信号。
0298 信号投递的次数太多。
0299 仅完成部分 ReadProcessMemory 或 WriteProcessMemory 请求。
0300 操作锁定请求被拒绝。
0301 系统接收了一个无效的操作锁定确认。
0317 在 %2 的消息文件中,系统无法找到消息号为 0x%1 的消息文本。
0487 试图访问无效地址。
0534 运算结果超过 32 位。
0535 该管道的另一方有一进程。
0536 等候进程打开管道的另一端。
0994 拒绝对扩展属性的访问。
0995 由于线程退出或应用程序的要求,I/O 操作异常终止。
0996 重叠的 I/O 事件不处于已标记状态。
0997 正在处理重叠的 I/O 操作。
0998 对内存位置的无效访问。
0999 执行页内操作出错。
1001 递归太深;堆栈溢出。
1002 窗口无法用来发送消息。
1003 无法完成此项功能。
1004 标志无效。
1005 卷不包含已识别的文件系统。请确认所有需要的文件系统驱动程序都已经加载,而且卷没有任何损坏。
1006 某文件的卷已在外部改变,因而打开的文件不再有效。
1007 要求的操作无法以全屏幕模式执行。
1008 试图引用并不存在的符号。
1009 配置注册表数据库已损坏。
1010 配置注册表主键无效。
1011 无法打开配置注册表主键。
1012 无法读取配置注册表主键。
1013 无法写入配置注册表主键。
1014 必须使用日志文件或其他副本来恢复注册表数据库中的某个文件。恢复成功。
1015 注册表已损坏。可能是一个包含注册表数据文件的结构已损坏,也可能内存中该文件的系统映像已损坏,或者因为备份副本(或日志)不存在(或损坏)导致无法恢复该文件。
1016 由注册表引起的 I/O 操作发生了不可恢复的错误。注册表将不能读取、写出或刷新包含注册表系统映像的其中一个文件。
1017 系统试图将文件加载或还原到注册表中,但是,指定的文件不是注册表文件格式。
1018 试图在注册表键(已经标记为删除)中完成的操作非法。
1019 系统无法在注册表日志文件中分配所需的空间。
1020 无法在已经有子键或键值的注册表项中创建符号链接。
1021 在易失的父键下不能创建固定的子键。
1022 通知的更改请求已经完成,并且返回信息还没有被送到调用者的缓冲区中。调用者需要列举所有文件以找到改动的内容。
1051 已将停止控制发送给与其他运行服务相关的服务。
1052 所要求的控制对此服务无效。
1053 服务没有及时地响应启动或控制请求。
1054 无法为该服务创建线程。
1055 服务数据库已锁定。
1056 该服务的实例已在运行。
1057 帐户名无效或者不存在,或者指定帐户名的密码无效。
1058 服务无法启动,可能因为被禁用,也可能因为没有关联的可用设备。
1059 已经指定了循环服务的从属关系。
1060 指定的服务不是所安装的服务。
1061 该服务此时无法接收控制消息。
1062 服务尚未启动。
1063 服务进程无法连接到服务控制程序。
1064 处理控制请求时,服务出现意外情况。
1065 指定的数据库不存在。
1066 服务返回服务特定的错误码。
1067 进程意外地终止。
1068 无法启动从属服务或组。
1069 由于登录失败,没有启动服务。
1070 启动后,服务保持在启动挂起状态。
1071 指定的服务数据库锁定无效。
1072 指定的服务已经标记为删除。
1073 指定的服务已经存在。
1074 系统当前正以上一次运行成功的配置运行。
1075 从属服务不存在,或已经标记为删除。
1076 已接受使用当前引导作为最后的有效控制设置。
1077 自从上一次启动以后,没有再次启动过该服务。
1078 该名称已经用作服务名或服务显示名。
1079 此服务的帐户不同于运行于同一进程上的其它服务的帐户。
1080 只能为 Win32 服务设置失败操作,不能为驱动程序设置。
1081 这个服务所运行的进程和服务控制管理器相同。所以,如果服务进程意外中止的话,服务控制管理器无法进行任何操作。
1082 这个服务没有设置恢复程序。
1083 配置成在该可执行程序中运行的这个服务不能执行该服务。
1100 已经到达磁带的物理尽头。
1101 磁带访问到文件标记。
1102 到达磁带或分区首部。
1103 磁带访问到文件组的末尾。
1104 磁带上没有其他数据。
1105 磁带无法分区。
1106 访问多重卷分区的新磁带时,当前的区块大小不正确。
1107 加载磁带时,找不到磁带分区信息。
1108 无法锁定媒体退出功能。
1109 无法卸载媒体。
1110 驱动器中的媒体已经更改。
1111 已经复位 I/O 总线。
1112 驱动器中没有媒体。
1113 在目标多字节代码页中不存在对单码字符的映射。
1114 动态链接库 (DLL) 初始化例程失败。
1115 正在关闭系统。
1116 无法终止系统关机,因为没有进行中的关机操作。
1117 由于 I/O 设备出现错误,无法运行该请求。
1118 串行设备初始化失败。将卸载串行驱动程序。
1119 无法打开正与其他设备共享中断请求 (IRQ) 的设备。至少有一个使用该 IRQ 的设备已经打开。
1120 由于再次写入串行口,串行 I/O 操作已结束。(IOCTL_SERIAL_XOFF_COUNTER 为零。)
1121 由于超时,串行 I/O 操作已结束。 (IOCTL_SERIAL_XOFF_COUNTER 未达到零。)
1122 在软盘上找不到标识符地址标记。
1123 软盘扇区标识符字段与软盘控制器磁道地址不匹配。
1124 软盘控制器报告软盘驱动程序不能识别的错误。
1125 软盘控制器返回的结果和注册的不一致。
1126 访问硬盘时,再校准操作失败,再试一次后也无法操作。
1127 访问硬盘时,磁盘操作失败,再试一次后仍没有作用。
1128 访问硬盘时,需要重启动磁盘控制器,但仍未成功。
1129 磁带已卷到尽头。
1130 可用的服务器存储区不足,无法执行该命令。
1131 检测到潜在的死锁情况。
1132 指定的基址或文件偏移量没有正确对齐。
1140 试图更改系统电源状态的操作被另一应用程序或驱动程序禁止。
1141 系统 BIOS 无法更改系统电源状态。
1142 试图在一文件上创建超过系统允许数额的链接。
1150 指定的程序需要新的 Windows 版本
1151 指定的程序不是 Windows 或 MS-DOS 程序。
1152 无法启动指定程序的多个实例。
1153 指定的程序是为 Windows 的早期版本编写的。
1154 运行此应用程序所需的某个库文件已损。
1155 没有应用程序与该操作中所指定的文件关联。
1156 将命令发送到应用程序时出现错误。
1157 找不到运行此应用程序所需的某个库文件。
1158 当前进程已使用了 Window 管理器对象的系统允许的所有句柄。
1159 消息只能与同步操作一起使用。
1160 指出的源元素没有媒体。
1161 指出的目标元素已包含媒体。
1162 指出的元素不存在。
1163 指出的元素是未显示的存储资源的一部分。
1164 指出的设备需要重新初始化,因为硬件有错误。
1165 设备显示在尝试进一步操作之前需要清除。
1166 设备显示它的门仍是打开状态。
1167 设备没有连接。
1168 找不到元素。
1169 索引中没有同指定项相匹配的项。
1170 在对象上不存在指定的属性集。
1171 传递到 GetMouseMovePoints 的点不在缓冲区中。
1172 跟踪(工作站)服务没运行。
1173 找不到卷 ID。
1175 无法删除要被替换的文件。
1176 无法将替换文件移到要被替换的文件。要被替换的文件保持原来的名称。
1177 无法将替换文件移到要被替换的文件。要被替换的文件已被重新命名为备份名称。
1178 卷更改记录被删除。
1179 卷更改记录服务不处于活动中。
1180 找到一份文件,但是可能不是正确的文件。
1181 日志项已从日志中删除。
1200 指定的设备名无效。
1201 设备当前虽然未连接,但它是记忆连接。
1202 试图记起已经记住的设备。
1203 网络供应商不接受给定的网络路径。
1204 指定的网络供应商名无效。
1205 无法打开网络连接配置文件。
1206 网络连接配置文件已损坏。
1207 无法列举非包容类。