WinExec函数,启动其他应用程序

WinExec

The WinExec function runs the specified application.

Note  This function is provided only for compatibility with 16-bit Windows. Applications should use the CreateProcess function.

UINT WinExec(
  LPCSTR lpCmdLine,  // 可执行程序的路径,如"c:\\a.exe"
  UINT uCmdShow      // 启动方式
);

Parameters

lpCmdLine
[in] Pointer to a null-terminated character string that contains the command line (file name plus optional parameters) for the application to be executed. If the name of the executable file in thelpCmdLine parameter does not contain a directory path, the system searches for the executable file in this sequence:

  1. The directory from which the application loaded.
  2. The current directory.
  3. The Windows system directory. The GetSystemDirectory function retrieves the path of this directory.
  4. The Windows directory. The GetWindowsDirectory function retrieves the path of this directory.
  5. The directories listed in the PATH environment variable.
uCmdShow
[in] Specifies how a Windows-based application window is to be shown and is used to supply the wShowWindow member of the STARTUPINFO parameter to the CreateProcess function. For a list of the acceptable values, see the description of the nCmdShow parameter of the ShowWindow function. For a non-Windows – based application, the PIF file, if any, for the application determines the window state.

Return Values

If the function succeeds, the return value is greater than 31.

If the function fails, the return value is one of the following error values:

Value Meaning
0 The system is out of memory or resources.
ERROR_BAD_FORMAT The .exe file is invalid.
ERROR_FILE_NOT_FOUND The specified file was not found.
ERROR_PATH_NOT_FOUND The specified path was not found.

Remarks

The WinExec function returns when the started process calls the GetMessage function or a time-out limit is reached. To avoid waiting for the time out delay, call the GetMessage function as soon as possible in any process started by a call to WinExec.

Security Remarks

The executable name is treated as the first white space-delimited string in lpCmdLine. If the executable or path name has a space in it, there is a risk that a different executable could be run because of the way the function parses spaces. The following example is dangerous because the function will attempt to run "Program.exe", if it exists, instead of "MyApp.exe".

WinExec("C:\Program Files\MyApp", ...) 

If a malicious user were to create an application called "Program.exe" on a system, any program that incorrectly calls WinExec using the Program Files directory will run this application instead of the intended application.

To avoid this problem, use CreateProcess rather than WinExec. However, if you must use WinExec for legacy reasons, make sure the application name is enclosed in quotation marks as shown in the example below.

WinExec("\"C:\Program Files\MyApp.exe\" -L -S", ...)
时间: 2024-11-03 14:36:29

WinExec函数,启动其他应用程序的相关文章

PHP启动windows应用程序、执行bat批处理、执行cmd命令的方法(exec、system函数详解)_php实例

exec 或者 system 都可以调用cmd 的命令 直接上代码: 复制代码 代码如下: <?php /** 打开windows的计算器 */ exec('start C:WindowsSystem32calc.exe'); /** php生成windows的批处理文件后,再执行这个批处理文件*/ $filename = 't.bat'; $somecontent = 'C: '; $somecontent .= 'cd "C:/Program Files/MySQL-Front&quo

程序启动过程-vb.net中在执行form_load()函数之前都会对程序函数执行什么操作?

问题描述 vb.net中在执行form_load()函数之前都会对程序函数执行什么操作? 为啥我用于写.txt文件的Public的函数会在form_load之前执行导致.txt文件数据被删除? 解决方案 贴出你的代码. 在运行 form_load 前会执行 form的构造函数(New函数) 解决方案二: form.loader 之前你是不是以创建的打开了文件?

c语言-一个求函数的积分的程序执行问题

问题描述 一个求函数的积分的程序执行问题 #define _CRT_SECURE_NO_DEPRECATE #include double integrate(double double int); double equa(double); /*函数说明,背积函数,具体函数可替换*/ float a b c; void main() { double leftlimit rightlimit;/*积分上限,下限*/int n;/*梯形划分数*/ printf(""请输入被积分函数的系数

Outlook 2007中启动新闻组阅读程序

新闻组阅读程序也就是新闻阅读程序,用于访问各种类型的新闻组 (新闻组:由个人投递到新闻服务器的邮件的集合,服务器为由公司.小组或个人维护的计算机.有些新闻组有人监控,而大多数则没有,这时具有新闻组访问权限的任何人都可以投递和阅读邮件.).下载和阅读新闻邮件以及回复邮件.利用新闻组,与您使用相同产品或技术的人员可以为您提供有价值的信息,或者可利用新闻组了解其他人对主题的看法.实际上,您可以在 Internet 或公司的 Intranet 上找到有关任何主题的新闻组. 如果以前未安装新闻阅读程序.则

在CB6下基于api函数编写串口通信程序简介

1-在C++ Builder 6.0下基于api函数编写串口通信程序简介: 在dos/win95/win98的年代,操作系统对串口是不保护的,也就是说将串口的的资源完全开放给用户,用户可以用直接操作硬件的函数(比如说TC2.0下的inport()和outport()函数) 跟串口直接打交道,这时候用户使用直接操作串口的函数怎样"折磨"串口都是没有问题的,操作系统根本就不管不问,对串口操作所造成的一切后果都是用户一个人承担的,这时候用户对串口具有高度自由的支配权:但是,这种情况好景不长,

用C#实现启动另一程序的方法实例

一段实例代码,程序的目的是使用C#实现启动另一程序的方法.技术总监給出了我们这样一个有效的启动程序的有效方法,現在和大家分享下   复制代码 代码如下: private void btnCreate_Click(object sender, EventArgs e) ...{ int hWnd = FindWindow(null, "test");//窗體的名稱 //check if PowerReuse is launched or not //if yes, pass path o

用spark-submit启动Spark应用程序

用spark-submit启动Spark应用程序 bin/spark-submit脚本负责建立包含Spark以及其依赖的类路径(classpath),它支持不同的集群管理器以及Spark支持的加载模式. /bin/spark-submit \ --class --master \ --deploy-mode \ --conf = \ ... # other options \ [application-arguments] 一些常用的选项是: --class :你的应用程序的入口点(如org.a

广告-在android应用程序中启动其他apk程序,被启动程序退出后返回之前的程序

问题描述 在android应用程序中启动其他apk程序,被启动程序退出后返回之前的程序 大家好,我现在遇到这样的情况,我目前做的是一个android积分墙的项目,用户通过我的这个项目app做任务下载一个广告,当用户进入到我们的下载广告的apk 后,玩了一段时间后(玩了一段时间才会给积分),点击后退,当前的 广告apk 是退出了,同时我们的项目也退出了(原本我们的项目逻辑是不会退出的),回到了桌面......我们自己测试的时候并没有出现这样的情况,但是用户遇到了,并且用户反馈再次重启手机的时候,再

VB 6.0 在界面上点击,启动另一个程序,并且把点击转调用过去

问题描述 VB 6.0 在界面上点击,启动另一个程序,并且把点击转调用过去 VB 6.0 在界面上点击,启动另一个程序,并且把点击转调用过去,另一个程序的运算结果返回我的程序怎么做? 解决方案 可以借助剪贴板.文件系统或者管道或者消息传数据.

问个问题~~~~在页面上启动本地exe程序

问题描述 在java写的页面上有一个按钮,用来启动本地exe程序的,AcrtivexControl.RunProgram(......)通过传递命令函参数启动的,启动之后,exe程序需要手动点击按钮执行一个操作,但是操作在执行过程中被卡死了,或者叫被阻塞了,但是窗口不是出于未响应状态的,在任务管理器中显示也是exe程序正在执行.但是程序就是不往下走,这是什么原因呢????什么问题导致的??? 解决方案