shellexecute使用成功,但是exe不运行,双击运行没问题

jhk6666 2009-11-09 09:22:17
我通过shellexecute运行自己写的程序exe
shellexecute(open ... ...)
但是打不开那个exe
我查看了shellexecute的返回值是42,也就是大于32,应该是成功了
但是那个exe不运行,有时候在进程管理器中闪了一下又退出了
但是我双击我的exe,是能够正常运行的

请问有人知道这应该在哪方面找原因吗
...全文
1889 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
tju_wanderer 2012-09-01
  • 打赏
  • 举报
回复
太感谢了了,真的
overeem 2012-04-09
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 的回复:]

今天也遇到了类似问题,ShellExecute(NULL,"open","C:\\xxx.exe",NULL,“c:\\”,SW_SHOW);
用了这个解决了,非常感谢!主要是倒数第二个参数(程序所在目录)最好不要省略.
[/Quote]
我也遇到了这个问题,非常感谢
日兆不落 2011-01-12
  • 打赏
  • 举报
回复
今天也遇到了类似问题,ShellExecute(NULL,"open","C:\\xxx.exe",NULL,“c:\\”,SW_SHOW);
用了这个解决了,非常感谢!主要是倒数第二个参数(程序所在目录)最好不要省略.
ztenv 版主 2009-11-09
  • 打赏
  • 举报
回复
shellexeute()打开你的程序时,传入路径参数;然后再让shellexecute()所打开的程序调用你传入的参数就行了,明白吗?
jhk6666 2009-11-09
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 lianshaohua 的回复:]
你的程序是否在启动的时候读取本目录下的一些文件?如果是的话,如果你取的是当前路径,可能用shellexecute()打开文件时,当前的路径并不是你的程序所在路径,不知道你是否明白。最好的方法是把你要打开的程序写日志,然后通过日志找原因;这是最方便最有效最直接的办法了;
[/Quote]
醍醐灌顶。我去试试
肯定是打开了exe所在目录的路径的

果然如你所说
分肯定给你了

能不能再给点思路
我现在的这个shell.exe是在某个工程里 可能被用于任何路径。
而xxx.exe是固定的 C:\\xxx.exe 读取的文件也是 c:\\xxx.dat

我想在shell.exe里面就解决这个问题 有什么思路吗?
ztenv 版主 2009-11-09
  • 打赏
  • 举报
回复
你的程序是否在启动的时候读取本目录下的一些文件?如果是的话,如果你取的是当前路径,可能用shellexecute()打开文件时,当前的路径并不是你的程序所在路径,不知道你是否明白。最好的方法是把你要打开的程序写日志,然后通过日志找原因;这是最方便最有效最直接的办法了;
jhk6666 2009-11-09
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lianshaohua 的回复:]
运行之前,设置一下工作路径看一下,然后可以试试createProcess()
[/Quote]
设置工作路径是怎么意思?
我看createProcess太复杂就没用它

我用同样的shellexecute方法运行我的别的exe都能成功,,
不知道这个exe为什么 已经成功执行了 却没有显示在任务管理器 也没有后台跑起来 (功能没实现)
jhk6666 2009-11-09
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 the_face 的回复:]
你是如何确定XXX.exe没有运行起来?
[/Quote]

我的程序是有功能的啊。然后我想通过一些事务触发那些功能 并没有实现
但是我双击运行后 同样的事务 就能看到现象
jhk6666 2009-11-09
  • 打赏
  • 举报
回复
winexec同样现象

HINSTANCE result = WinExec("C:\\xxx.exe",SW_SHOW);
printf("result = %d\n",result);
system("PAUSE");

返回值是33 应该也是成功吧。

仍旧没有运行起来exe 双击没问题
yet_flash 2009-11-09
  • 打赏
  • 举报
回复
是不是需要加参数!
The_facE 2009-11-09
  • 打赏
  • 举报
回复
你是如何确定XXX.exe没有运行起来?
ztenv 版主 2009-11-09
  • 打赏
  • 举报
回复
运行之前,设置一下工作路径看一下,然后可以试试createProcess()
cphj 2009-11-09
  • 打赏
  • 举报
回复
如果执行程序的话,用WinExec最简单了
UINT WinExec(
LPCSTR lpCmdLine, // 命令路径
UINT uCmdShow // 显示方式,共有11种,具体可以查阅MSDN的ShowWindow函数
);

ShellExecute一般是用来寻找文件的关联直接打开不用加载与文件关联的应用程序
HINSTANCE ShellExecute(
HWND hwnd, //父窗口句柄
LPCTSTR lpOperation, //操作, 打开方式"edit","explore","open","find","print","NULL"
LPCTSTR lpFile, //文件名,前面可加路径
LPCTSTR lpParameters, //参数
LPCTSTR lpDirectory, //默认文件夹
INT nShowCmd //显示方式
);
jhk6666 2009-11-09
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

void main()
{


HINSTANCE result = ShellExecute(NULL,"open","C:\\xxx.exe",NULL,NULL,SW_SHOW);
printf("result = %d\n",result);
system("PAUSE");


}

这就是代码啊 没有什么好看的吧。。。
jhk6666 2009-11-09
  • 打赏
  • 举报
回复
exe的作用没有体现 。。没有运行起来就down掉了
功能也是没有体现 我已经试过了

双击却是一切ok

mengde007 2009-11-09
  • 打赏
  • 举报
回复
把完整代码贴出来;
feifanup 2009-11-09
  • 打赏
  • 举报
回复
exe的作用体现出啦了没有?
比如写了文件,或者干嘛的,总有个痕迹的.
jhk6666 2009-11-09
  • 打赏
  • 举报
回复
回1楼 我理解你的意思是
main()
{
shellexecute(open ... xxx.exe ...);
system("PAUSE");
}

是吗?
现象依旧 偶尔我的xxx.exe可能在任务管理器的进程列表中闪一次出现 但是马上就消失

但是我双击运行xxx.exe是可以正常跑的
ArmStronger 2009-11-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cphj 的回复:]
在你的代码main()中的return语句前加一行
system("pause");
以便程序结束前暂停

[/Quote]
如果lz双击exe也是一闪而过的话,就如1楼所说了
cphj 2009-11-09
  • 打赏
  • 举报
回复
在你的代码main()中的return语句前加一行
system("pause");
以便程序结束前暂停
加载更多回复(3)

64,663

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧