请问如何在BCB执行一个外部程序 而不是调用它

时间:2022-03-12 14:40:11
请问如何在BCB执行一个外部程序 而不是调用它 也就是说给指定地点的一个程序下一个运行的命令然后让它在幕后悄悄的运行而不显示运行过程(过程很短)。不是调用它。是让它跟我们在BCB之外运行一样  请教诸位高手了

8 个解决方案

#1


WinExec("test.exe",SW_HIDE);

#2


WinExec("test.exe",SW_HIDE);

#3


想后台运行必须用CreateProcess函数

#4


ShellExecute

#5


SHELL是调用了它运行一次 跟命令它在自己所在的地方运行不同
咕嘟老大能不能详细说明一下

#6


STARTUPINFO sinfo;                             // 进程启动所需信息
   sinfo.cb = sizeof(STARTUPINFO);                // 结构体长度
   memset(&sinfo, 0, sizeof(STARTUPINFO));        // 清除所有的域
   sinfo.dwFlags = STARTF_FORCEOFFFEEDBACK;       // 关闭回馈
   sinfo.wShowWindow = SW_SHOWDEFAULT;            // 使用缺省窗口

   String AppName;                                // 应用名称
   TListItem *Item = FItems->Item[CurIndex];      // 相应的列表项目
   TStrings *SubItems = Item->SubItems;           // 相应的子项目
   AppName.printf("%s%s.exe", FAppPath.c_str(), SubItems->Strings[4].c_str());
                                                  // 组合出应用名称
   if(CreateProcess(AppName.c_str(), Item->Caption.c_str(), NULL, NULL,
      0, CREATE_NO_WINDOW, NULL, FAppPath.c_str(), &sinfo, &FProcessList[CurIndex]))
   {
      SubItems->Strings[1] = "启动";              // 设置进程的状态为启动
      SubItems->Strings[2] = FormatDateTime("yyyy-mm-dd hh:mm:ss", Now());
                                                  // 填充进程启动时间
   }
   else FProcessList[CurIndex].hProcess = NULL;   // 启动进程

#7


STARTUPINFO sinfo;                             // 进程启动所需信息
   sinfo.cb = sizeof(STARTUPINFO);                // 结构体长度
   memset(&sinfo, 0, sizeof(STARTUPINFO));        // 清除所有的域
   sinfo.dwFlags = STARTF_FORCEOFFFEEDBACK;       // 关闭回馈
   sinfo.wShowWindow = SW_SHOWDEFAULT;            // 使用缺省窗口

   PROCESS_INFORMATION pinfo;
   if(CreateProcess("d:\\test\\test.exe", "test abc", NULL, NULL,
      0, CREATE_NO_WINDOW, NULL, "d:\\test", &sinfo, &PInfo))
      ShowMessage("启动成功");
   else ShowMessage("启动失败");

#8


前面的例子是项目中使用的,后面的例子更一般些,CREATE_NO_WINDOW表示没有窗口(后台运行)

#1


WinExec("test.exe",SW_HIDE);

#2


WinExec("test.exe",SW_HIDE);

#3


想后台运行必须用CreateProcess函数

#4


ShellExecute

#5


SHELL是调用了它运行一次 跟命令它在自己所在的地方运行不同
咕嘟老大能不能详细说明一下

#6


STARTUPINFO sinfo;                             // 进程启动所需信息
   sinfo.cb = sizeof(STARTUPINFO);                // 结构体长度
   memset(&sinfo, 0, sizeof(STARTUPINFO));        // 清除所有的域
   sinfo.dwFlags = STARTF_FORCEOFFFEEDBACK;       // 关闭回馈
   sinfo.wShowWindow = SW_SHOWDEFAULT;            // 使用缺省窗口

   String AppName;                                // 应用名称
   TListItem *Item = FItems->Item[CurIndex];      // 相应的列表项目
   TStrings *SubItems = Item->SubItems;           // 相应的子项目
   AppName.printf("%s%s.exe", FAppPath.c_str(), SubItems->Strings[4].c_str());
                                                  // 组合出应用名称
   if(CreateProcess(AppName.c_str(), Item->Caption.c_str(), NULL, NULL,
      0, CREATE_NO_WINDOW, NULL, FAppPath.c_str(), &sinfo, &FProcessList[CurIndex]))
   {
      SubItems->Strings[1] = "启动";              // 设置进程的状态为启动
      SubItems->Strings[2] = FormatDateTime("yyyy-mm-dd hh:mm:ss", Now());
                                                  // 填充进程启动时间
   }
   else FProcessList[CurIndex].hProcess = NULL;   // 启动进程

#7


STARTUPINFO sinfo;                             // 进程启动所需信息
   sinfo.cb = sizeof(STARTUPINFO);                // 结构体长度
   memset(&sinfo, 0, sizeof(STARTUPINFO));        // 清除所有的域
   sinfo.dwFlags = STARTF_FORCEOFFFEEDBACK;       // 关闭回馈
   sinfo.wShowWindow = SW_SHOWDEFAULT;            // 使用缺省窗口

   PROCESS_INFORMATION pinfo;
   if(CreateProcess("d:\\test\\test.exe", "test abc", NULL, NULL,
      0, CREATE_NO_WINDOW, NULL, "d:\\test", &sinfo, &PInfo))
      ShowMessage("启动成功");
   else ShowMessage("启动失败");

#8


前面的例子是项目中使用的,后面的例子更一般些,CREATE_NO_WINDOW表示没有窗口(后台运行)