ShellExecute函数打开exe可执行文件问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ShellExecute函数打开exe可执行文件问题相关的知识,希望对你有一定的参考价值。

VC++ 执行ShellExecute(NULL,"open","1.exe",NULL,"E:\\debug",SW_SHOWNORMAL);可打开1.exe可执行文件。但是ShellExecute(NULL,"open",filename.c_str(),NULL,filepath.c_str(),SW_SHOWNORMAL); 其中filename和filepath都是从配置文件中获取。执行此条语句却不能打开1.exe可执行文件。求高手解答!

不会,你先确定,filename.c_str()执行后能不能返回可执行文件名,
还有后面的filepath.c_str()函数能不能获取文件路径,
如果上面两部确定可以的话,应该就可以正常打开了!追问

我调试跟踪了,filename和filepath的值和以上填入函数内的值是相同的。
还有一点就是我在函数之前赋值
filename="1.exe";

filepath="E:\\debug";
又可以执行。
为什么从配置文件中获取的变量就不行了?

追答

在函数之前这赋值肯定是可以的!问题就在于你调用的函数有没有得到相应的路径
推荐方法:
1、可通过Messagebox函数,将filepath.c_str()函数得到的字符串打印出来,看看是否正确。
2、在函数内部定义一个字符数组,然后通过filepath.c_str()函数得到文件名,并保存在数组中,然后用数组作为参数传递给ShellExecute,看看怎么样!

希望能帮到你!望采纳!

追问

Messagebox显示也一样。
用这2个字符数组传入也一样没结果。
char *str111= new char[filepath.length()+1];
char *str222= new char[filename.length()+1];
strcpy(str111,filepath.c_str());
strcpy(str222,filename.c_str());
就是不清楚为什么!

追答

用Messagebox显示,能正常显示文件名和路径名吗??如果也不可以,那就说明是你的函数没有得到文件名和路径民!那你看看那个函数 是是不是有问题呢。。

追问

messagebox显示的文件和路径名也一样,但是函数返回值表明就是文件名不对,这个问题有点匪夷所思。

追答
参考技术A 相对路径的问题,ShellExecute前你读了配置文件,你的配置文件应该和1.exe不是同一个目录下面的追问

是同一目录,不过还是谢谢你。问题已经解决了,读文件内容我换成fstream类读取就正确了。

用Python 打开程序的两中方法

1、ShellExecute函数

import win32api

win32api.ShellExecute(0, open, notepad.exe, ‘‘, ‘‘, 0)           # 后台执行
win32api.ShellExecute(0, open, notepad.exe, ‘‘, ‘‘, 1)           # 前台打开
win32api.ShellExecute(0, open, notepad.exe, wmi.txt, ‘‘, 1)      # 打开文件
win32api.ShellExecute(0, open, iexplore.exe, https://www.baidu.com/, ‘‘, 1)   # 用IE浏览器打开百度网址
win32api.ShellExecute(0, open, D:Program Files (x86)QQBinQQScLauncher.exe, ‘‘, ‘‘, 1) #打开QQ程序

2、CreateProcess

下面实例为打开,关闭,判断是否关闭

import win32process
import  time
# 打开记事本,获得其句柄
handle = win32process.CreateProcess(rC:Windows
otepad.exe, ‘‘, None, None, 0, win32process.CREATE_NO_WINDOW, None, None, win32process.STARTUPINFO())
time.sleep(2)
print(handle)

# 终止进程(程序柄句,0为关闭)
win32process.TerminateProcess(handle[0], 0)

import win32event
#等待进程结束 handle[0]为窗口的柄句,如果为-1,则一直等待. 如果该柄句程序关闭后 则输出为0 #可以判断程序是否关闭了 print(win32event.WaitForSingleObject(handle[0], -1))

以上是关于ShellExecute函数打开exe可执行文件问题的主要内容,如果未能解决你的问题,请参考以下文章

delphi中ShellExecute使用详解

delphi里怎么用ShellExecute函数

MFC 打开外部EXE文件的三种方法

MFC中如何关闭ShellExecute调用的外部执行程序?

Delphi程序中怎样调用别的可执行程序?

c++打开外部exe并输入指令