MFC打开其它应用程序(ShellExecute)

Lucky_HJH 2010-05-29 06:07:42
打开其它程序可以用ShellExecute(NULL,"open",filename,NULL,NULL,SW_SHOWNORMAL)

但是这样打开的程序的父进程就是这个MFC程序了,例如用1.exe打开2.exe,那么2.exe的父进程就是1.exe而并不是explorer.exe,但我想令打开的2.exe的父进程是explorer.exe,不知有没有办法呢?

或者直接点说,我发现用一个程序打开另一个以相对路径调用文件的程序,这时会找不到那些文件而出现问题,如何解决?
...全文
163 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lucky_HJH 2010-06-01
  • 打赏
  • 举报
回复
LS正解,就是这个意思。
原来lpCurrentDirectory是这样用的,已经搞定,谢谢!
wltg2001 2010-05-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lucky_hjh 的回复:]
不是,这个被调用的程序我无法修改,因为不是我编写的,但它就是使用相对路径,我用我的程序调用它的时候就会出现问题。而使用CreateProcess貌似也不行,效果跟ShellExecute一样
[/Quote]
在调用之前用SetCurrentDirectory()设置当前目录为那个程序正确的工作目录行不行呢
Lucky_HJH 2010-05-30
  • 打赏
  • 举报
回复
不是,这个被调用的程序我无法修改,因为不是我编写的,但它就是使用相对路径,我用我的程序调用它的时候就会出现问题。而使用CreateProcess貌似也不行,效果跟ShellExecute一样
寂寞vs爱神 2010-05-30
  • 打赏
  • 举报
回复
楼主先判断文件是否存在,如果存在设定当前目录,再去执行ShellExecute。
向立天 2010-05-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lucky_hjh 的回复:]
不是,这个被调用的程序我无法修改,因为不是我编写的,但它就是使用相对路径,我用我的程序调用它的时候就会出现问题。而使用CreateProcess貌似也不行,效果跟ShellExecute一样
[/Quote]
我想我已经不知道你什么意思了
wltg2001 2010-05-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xianglitian 的回复:]
引用 7 楼 lucky_hjh 的回复:
不是,这个被调用的程序我无法修改,因为不是我编写的,但它就是使用相对路径,我用我的程序调用它的时候就会出现问题。而使用CreateProcess貌似也不行,效果跟ShellExecute一样

我想我已经不知道你什么意思了
[/Quote]
我想我理解了他的意思,他要调用一个外部的EXE文件,这个外部EXE文件中可能会用到某些文件,这些文件在引用时用的是相对路径。因为子进程在工作时会继承父进程的环境,所以此时的工作目录变了,这样,他调用的外部EXE在用相对路径时就会出错。
不知道我理解的对不对。
其实用CreateProcess可以解决这个问题的。在用CreateProcess时第八个参数:
LPCTSTR lpCurrentDirectory,可以设定工作目录。
向立天 2010-05-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zwfgdlc 的回复:]
使用相对路径的话。

估计是你的当前目录没设置好,用SetCurrentDirectory()设置当前目录
[/Quote]
用GetModuleFileName然后解析路径更好一些吧
zwfgdlc 2010-05-29
  • 打赏
  • 举报
回复
使用相对路径的话。

估计是你的当前目录没设置好,用SetCurrentDirectory()设置当前目录
这不是鸭头 2010-05-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 arpnet99 的回复:]
CreateProcess 可以指定
[/Quote]这个自己看MSDN,我看了看貌似2008的MSDN和6.0的不大一样...
这不是鸭头 2010-05-29
  • 打赏
  • 举报
回复
CreateProcess 可以指定
soswaidao 2010-05-29
  • 打赏
  • 举报
回复
createRemotethread创建远程线程
uc_fly 2010-05-29
  • 打赏
  • 举报
回复
可以用个简单方法回避:先判断文件是否存在,然后决定是否打开。
BOOL PathFileExists(
LPCTSTR pszPath
);

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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