首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用ShellExecuteEx启动外部应用程序并等待它初始化

使用ShellExecuteEx启动外部应用程序并等待它初始化的方法如下:

  1. 首先,需要包含相关的头文件:#include<Windows.h> #include <Shellapi.h> #include<iostream> #include<thread> #include<chrono>
  2. 定义一个函数来启动外部应用程序并等待它初始化:bool ShellExecuteExAndWait(const std::wstring& lpFile, const std::wstring& lpParameters) { SHELLEXECUTEINFOW ShExecInfo = { 0 }; ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFOW); ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI; ShExecInfo.hwnd = NULL; ShExecInfo.lpVerb = L"open"; ShExecInfo.lpFile = lpFile.c_str(); ShExecInfo.lpParameters = lpParameters.c_str(); ShExecInfo.lpDirectory = NULL; ShExecInfo.nShow = SW_SHOW; ShExecInfo.hInstApp = NULL; if (ShellExecuteExW(&ShExecInfo)) { if (ShExecInfo.hProcess != NULL) { // 等待进程初始化 WaitForInputIdle(ShExecInfo.hProcess, INFINITE); // 关闭进程句柄 CloseHandle(ShExecInfo.hProcess); return true; } } return false; }
  3. 在主函数中调用该函数,启动外部应用程序并等待它初始化:int main() { std::wstring lpFile = L"C:\\Program Files\\Internet Explorer\\iexplore.exe"; std::wstring lpParameters = L"https://www.baidu.com"; if (ShellExecuteExAndWait(lpFile, lpParameters)) { std::cout << "外部应用程序启动成功并等待初始化完成。"<< std::endl; } else { std::cout << "外部应用程序启动失败。"<< std::endl; } return 0; }

注意:在实际使用中,需要根据实际情况修改lpFilelpParameters的值。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

CC++ 打开外部程序

与 ShellExecute 一样,ShellExecuteEX 也不需要管理员启动就可以打开所有进程 int main() { /* ShellExecuteEX 1.ZeroMemory(...hProcess; // 新启动应用程序的句柄 } SHELLEXECUTEINFOA, *LPSHELLEXECUTEINFOA; */ ZeroMemory(&sei, sizeof(SHELLEXECUTEINFO...< "calc GetLastError = " << GetLastError() << endl; getchar(); return 0; } CreateProcess 这个函数<em>启动</em><em>外部</em>程序可以说是一波三折...Programming\\取色器.exe" 是常量字符串,WCHAR* szCommandLine = L"E:\\MyToolBar\\Programming\\取色器.exe"; 是一个指针,那么最后验证一下指向的是否是一个只读内存就可以了...我使用 CE 验证的,通过勾选和不勾选 “可写”,可以发现 WCHAR* szCommandLine 的确是只读变量(指针): 既然这样我们只能修改代码: int main() { // 初始化

65820
  • SWT程序中嵌入第三方程序的窗口

    在开发系统的时候经常需要嵌入外部的程序,比如将企业原有的系统集成到我们的系统中,而且要求看起 来像和我们的程序一样嵌入到我们的系统中,这时就要借助于Win32了。...在以前使用VC、Delphi、C#开发的 使用的时候可以直接调用Win32的API来操作,好在SWT中提供了Win32API的封装,而且封装的比较好,大部 分都在org.eclipse.swt.internal.win32...info.lpFile = lpFile; info.nShow = OS.SW_HIDE; boolean result = OS.ShellExecuteEx (info...execute("notepad.exe"); //等待NotePad.exe启动并且初始化完毕,需要根据实际情况调整sleep的时间 Thread.sleep(1000); //"Notepad..."为被嵌套程序窗口的ClassName(Win32级别),可以使用Spy++等工具查看 int notepadHwnd = OS.FindWindow(new TCHAR(0,"Notepad"

    45110

    【Windows】文件类型与链接类型的默认程序

    (Default) 条目中提供的应用程序名称可以使用或不使用其 .exe 扩展名进行说明。 如有必要, ShellExecuteEx 函数 会在搜索 应用路径 子项时添加扩展。...默认情况下,当放置目标是可执行文件,并且未提供 DropTarget 值时,Shell 会将放置的文件列表转换为命令行参数,通过 lpParameters 将其传递给 ShellExecuteEx。...Path 提供一个字符串 (以分号分隔的目录列表的形式,) 通过调用 ShellExecuteEx 启动应用程序时追加到 PATH 环境变量。 它是 .exe 的完全限定路径。 这是 REG_SZ。...当 ShellExecuteEx 函数启动应用程序且未设置 UseUrl=1 值时, ShellExecuteExecuteEx 会将文档下载到本地文件,并在本地副本上调用处理程序。...当使用包含非 null 参数列表的快捷方式或显式 应用程序用户模型 ID (AppUserModelIDs) 启动时,可以将进程固定 (作为该快捷方式) 。

    39010

    windows文件在另一程序打开_windows程序设计第7版

    均已打开 记事本(notepad)为例 注意:打开其他程序时有的方法不可行,可都使用一遍进行测试 1、创建一个新线程打开应用 PROCESS_INFORMATION processInfo; char...if (CreateProcess(NULL, cCmdLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &processInfo)) { // 等待子进程的退出...SE_ERR_DDETIMEOUT 请求超时,无法完成DDE事务请求 SE_ERR_DLLNOTFOUND 未找到指定dll SE_ERR_FNF 未找到指定文件 SE_ERR_NOASSOC 未找到与给的文件拓展名关联的应用程序...subject=Hello&Body=This is a test", NULL,NULL, SW_SHOWNORMAL); 打开新邮件窗体,自己主动填入收件人地址、邮件主题和邮件正文。...,直到执行结束 SHELLEXECUTEINFO ShExecInfo = { 0}; ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO

    69010

    init和pause容器是什么?

    初始化容器通常用于预处理数据、等待外部资源就绪、执行配置任务等。 目的:初始化容器的主要目的是在主容器启动之前执行一些必要的任务,以确保主容器能够正常运行。...这可以包括从外部数据源拉取数据、进行密钥或配置的设置、等待其他服务或资源就绪等。 容器顺序:Pod 中可以定义一个或多个初始化容器,这些初始化容器按照在配置中定义的顺序顺序执行。...等待外部服务:如果主容器依赖于外部数据库或其他服务,初始化容器可以等待这些服务就绪后再启动主容器。 数据预处理:初始化容器可以在主容器启动之前进行数据的预处理,例如解压缩数据、数据格式转换等。...的主要作用是维持 Pod 的生命周期。当 Pod 创建时,Pause 容器会启动保持运行状态,直到 Pod 被删除。...与初始化容器的区别: 虽然初始化容器和 Pause 容器都是在 Pod 中运行的特殊容器,但它们有不同的作用和特性: 作用:初始化容器用于在主容器启动之前执行任务,如数据预处理或等待外部资源就绪。

    30810

    【JAVA多线程】CountDownLatch的使用

    CountDownLatch这个类能够使一个线程等待其他线程完成各自的工作后再执行。例如,应用程序的主线程希望在负责启动框架服务的线程已经启动所有的框架服务之后再执行。...我们只需调用 一次countDown()方法就可以让所有的等待线程同时恢复执行。 开始执行前等待n个线程完成各自任务:例如应用程序启动类要确保在处理用户请求前,所有N个外部系统已经启动和运行了。...死锁检测:一个非常方便的使用场景是,你可以使用n个线程访问共享资源,在每次测试阶段的线程数目是不同的,尝试产生死锁。...CountDownLatch使用例子 在这个例子中,我模拟了一个应用程序启动类,开始时启动了n个线程类,这些线程将检查外部系统通知闭锁,并且启动类一直在闭锁上等待着。...,负责初始化闭锁,然后等待,直到所有服务都被检测完。

    3K40

    CountDownLatch使用解析

    CountDownLatch这个类能够使一个线程等待其他线程完成各自的工作后再执行。例如,应用程序的主线程希望在负责启动框架服务的线程已经启动所有的框架服务之后再执行。...(2)开始执行前等待n个线程完成各自任务:例如应用程序启动类要确保在处理用户请求前,所有N个外部系统已经启动和运行了。...(3)死锁检测:一个非常方便的使用场景是,你可以使用n个线程访问共享资源,在每次测试阶段的线程数目是不同的,尝试产生死锁。...CountDownLatch使用例子 在这个例子中,我模拟了一个应用程序启动类,开始时启动了n个线程类,这些线程将检查外部系统通知闭锁,并且启动类一直在闭锁上等待着。...,负责初始化闭锁,然后等待,直到所有服务都被检测完。

    45320

    【Chromium】Base库的最佳实践 - 进程和线程

    启动进程 Base库启动进程有多种方式,主要分为两大类:LaunchProcess和GetAppOutput* base::LaunchProcess是一个用于启动外部进程的函数。...允许你指定命令行参数、工作目录、环境变量等,并且可以等待进程完成或异步地处理进程输出。 base::GetAppOutput是一个用于执行外部命令捕获其标准输出的函数。...通常用于简单地执行命令获取其输出结果。 异同点 目的:LaunchProcess是为了启动和管理外部进程,而GetAppOutput是为了执行命令获取其输出。...如果你只是简单地想要执行一个命令获取的输出,GetAppOutput会更方便。...,注意默认启动进程是不等待进程直接退出,不会卡线程,如果需要同步等待进程退出,则需要将LaunchOptions的wait置为true。

    40410

    Spark on Yarn 架构解析

    新的架构使用全局管理所有应用程序的计算资源分配。...它可以处理客户端提交计算作业的请求,启动监听ApplicationMaster,监控NodeManager,进行资源分配与调度。每一个应用程序需要不同类型的资源,因此就需要不同的容器。...具体来说呢,进行数据的切分,为应用申请资源分配给任务,完成任务监控与容错。实际上,每个应用的ApplicationMaster是一个详细的框架库。...每个任务会被分配一个容器,该任务只能在该容器中执行,使用该容器封装的资源。...2.等待SparkContext初始化完成,最多等待spark.yarn.applicationMaster.waitTries次数(默认为10),如果等待了的次数超过了配置的,程序将会退出;否则用SparkContext

    1.4K10

    Zzreal的大数据笔记-SparkDay03

    ,然后为向ResourceManager申请资源,启动Executor来运行Task,同时监控的整个运行过程,直到运行完成 YARN-cluster的工作流程分为以下几个步骤 Spark Yarn...进行SparkContext等的初始化 ApplicationMaster向ResourceManager注册,这样用户可以直接通过ResourceManage查看应用程序的运行状态,然后它将采用轮询的方式通过...这一点和Standalone模式一样,只不过SparkContext在Spark Application中初始化时,使用CoarseGrainedSchedulerBackend配合YarnClusterScheduler...负责和ResourceManager打交道并请求资源,获取资源之后告诉NodeManager为其启动Container。...YARN-Cluster模式下,Driver运行在AM(Application Master)中,负责向YARN申请资源,监督作业的运行状况。

    60290

    CountDownLatch用法详解

    概念 CountDownLatch是一个同步工具类,允许一个或多个线程一直等待,直到其他线程执行完后再执行。例如,应用程序的主线程希望在负责启动框架服务的线程已经启动所有框架服务之后执行。...一个典型应用场景就是启动一个服务时,主线程需要等待多个组件加载完毕,之后再继续执行。 CountDownLatch典型用法2:实现多个线程开始执行任务的最大并行性。...如果我们创建一个初始计数器为1的CountDownLatch,让其他所有线程都在这个锁上等待,只需要调用一次countDown()方法就可以让其他所有等待的线程同时恢复执行。...开始执行前等待N个线程完成各自任务:例如应用程序启动类要确保在处理用户请求前,所有N个外部系统都已经启动和运行了。...死锁检测:一个非常方便的使用场景是你用N个线程去访问共享资源,在每个测试阶段线程数量不同,尝试产生死锁。

    8.7K21

    13个鲜为人知的Kubernetes技巧

    使用初始化容器进行设置脚本 技巧:初始化容器在 Pod 中的应用容器之前运行,非常适合需要在应用程序启动之前完成的设置脚本。这可能包括数据库迁移、配置文件创建或等待外部服务可用等任务。...初始化容器可以运行一系列设置任务,确保每个步骤在主应用程序容器启动之前都成功完成。...command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;'] 此示例使用初始化容器在启动应用程序容器之前等待名为...何时使用:当你的应用程序容器依赖于外部服务或配置在它们启动之前可用时,初始化容器是非常宝贵的。它们确保你的应用程序在环境准备就绪的情况下启动。...注意事项:直到所有初始化容器成功完成,整个 Pod 的启动才会被阻塞。确保初始化容器高效并且能够优雅地处理失败,以防止它们成为瓶颈或导致 Pod 启动失败。 6.

    14210

    WinExec、ShellExecute和CreateProcess

    CreateProcess因为使用复杂,比较少用。 WinExec主要运行EXE文件。   ...2、特殊用法   1)如果将FileName参数设置为“http:”协议格式,那么该函数将打开默认浏览器链接到指定的URL地址。...若用户机器中安装了多个邮件客户程序,则该函数将根据Windows 9x/NT注册表中mailto协议处理程序的设置确定启动哪个邮件客户程序。   ...ShellExecute(m_hWnd, “find”, “d:\\nish”, NULL, NULL, SW_SHOW); Q: 如何启动一个程序,直到运行结束?    ...要注意,针对CreateProcess的一些参数对控制台应用程序是特定的,而其它参数则对各种应用程序有用。大多数情况下,并不一定要填入 STARTUPINFO结构,但无论如何必须提供

    1K20

    Kubernetes 探针详解!

    如果应用程序在进程启动后需要一些时间来初始化状态,要配置 readiness 探针让 Kubernetes 在发送新流量之前进行等待。...这意味着 readiness 探针不仅会在启动时运行,而且还会在 Pod 运行期间反复运行。这是为了处理应用程序暂时不可用的情况(比如加载大量数据、等待外部连接时)。...在这种情况下,我们不一定要杀死应用程序,可以等待恢复。readiness 探针可用于检测这种情况,并在 Pod 再次通过 readiness 检查后,将流量发送到这些 Pod。...假设有一个偶尔需要下载大量数据的应用程序,由于 initialDelaySeconds 是一个静态数字,因此该应用程序即使不需要那么长的初始化等待时间,我们也必须设置最保守的等待时间。...例如,当应用程序失去与数据库的连接时,可以使用 readiness 探针暂时阻止新请求允许系统重新连接。它还可以将繁忙的 Pod 标记为未准备,将工作负载平衡到其他 Pod。

    3K10

    云原生|别拿Init Container不当前菜

    Init Containers 是 Pod 中一种特殊类型的容器,的目的是在主容器启动之前执行一些初始化任务。...依赖解决 有时,主容器启动之前可能需要一些额外的资源或依赖项。比如等待外部服务准备就绪、下载数据或配置文件等各种准备工作。...使用 Init Containers 可以确保这些依赖项在主容器启动之前已经就绪。 2. 数据预处理 Init Containers 还可以用于预处理数据。...并行初始化 由于 Init Containers 是按顺序执行的,你可以为不同的初始化任务使用不同的容器,使这些任务能够以并行方式执行。这可以加速整体启动过程。...示例演示 比如启动一个 Web 应用程序时,依赖于一个后端数据库,因此可以使用 Init Containers 来确保数据库初始化完毕后,Web 应用程序才开始启动

    16310

    你可能不知道的13个Kubernetes技巧

    使用初始化容器来运行脚本 初始化容器在 Pod 中的应用容器之前运行,非常适合需要在应用启动之前完成的初始化配置脚本。这可能包括数据库迁移、配置文件创建或等待外部服务可用等任务。...初始化容器可以运行一系列初始化任务,确保在主应用容器启动之前每个步骤都成功完成。...command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;'] 这个示例使用一个初始化容器来等待一个名为...什么情况使用呢? 初始化容器在您的应用容器在启动之前依赖于外部服务或配置可用时非常重要。它们确保您的应用在环境准备就绪的情况下启动。...什么情况使用呢? 请对所有容器应用请求和限制,以确保应用程序的性能可预测,避免在集群中运行的应用程序之间的资源争抢。

    14110

    Spark系列 - (4) Spark任务调度

    ,会分别初始化DAGScheduler、TaskScheduler 、SchedulerBackend 以及 HeartbeatReceiver,启动SchedulerBackend 以及 HeartbeatReceiver...Resource Manager:它是YARN的主守护进程,负责所有应用程序之间的资源分配和管理。每当接收到处理请求时,都会将其转发给相应的节点管理器,相应地分配资源以完成请求。...Node Manager:负责 Hadoop 集群上的单个节点,管理应用程序和工作流以及该特定节点。的主要工作是跟上资源管理器的步伐。向资源管理器注册并发送带有节点健康状态的心跳。...监控资源使用情况,执行日志管理,还根据资源管理器的指示杀死容器。它还负责创建容器进程根据Application master的请求启动。...TaskScheduler初始化后会启动SchedulerBackend,负责跟外界打交道,接收Executor的注册信息,维护Executor的状态,TaskScheduler在SchedulerBackend

    55510

    新型PPT钓鱼攻击分析(含gootkit木马详细分析)

    3bff3e4fec2b6030c89e792c05f049fc 在拿到样本我们放到虚拟机中进行执行,可以看到以下,但是这并不会触发攻击 当我们用F5放映这个文档后,并把鼠标放到 Loading…Please wait 这个上面,就可以看到如下的画面,提示我们要启动一个外部程序...我们在slide1.xml.rels 中找到这段powershell脚本,我们可以看到Id为rId2, 我们在对应的slide1.xml 中id为rId2 对应的动作位为,当鼠标覆盖时,就触发这个外部事件...如果判断是低权限的进程,则会通过ShellExecuteEx 使用管理员权限启动 ? 之后在比较当前进程不是IE和不是任务进程后,打开BIOS注册表,查找是否在虚拟机中 ?...然后拷贝自身到如下目录下,重命名位mqnets.exe,执行 ? 删除自身 ? 我们看看在拷贝到IE目录下样本会做些什么,在这里比较是在IE目录下的时候,会发生跳转 ?...设置启动 使用 IEAK\GroupPolicy\PendingGPOs key 去保持持久化 ? 第五个线程主要是判断Temp文件是否如下图的文件,如果有壳杀死自身,删除自身 ? ?

    1.4K40
    领券