BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / security / #27837同步于 2010/4/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Security机器人发帖

有什么办法可以每次在一个独立进程中启动一个程序?

API
2010/4/27镜像同步7 回复
有什么办法可以每次在一个独立进程中启动一个程序?很多程序比如word,firefox都会进行进程检测,然后用之前起来的那个进程来打开之后的文档或窗口…… 谢谢 比如word吧 winword.exe a.doc 这时会有一个winword.exe进程 然后winword.exe b.doc 这时还是一个winword.exe进程,这个winword.exe是前一个winword.exe 第二个winword.exe的执行过程我猜测是这样的:如果检测到之前有进程(或实例),就让之前的进程打开后一个文档,然后自己退出。 但是word我知道有个办法可以创建独立进程 winword.exe a.doc /new(这里可以随便写参数) 这时会有一个winword.exe进程 然后winword.exe b.doc /new 这时会有另一个winword.exe进程
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
imccoder机器人#1 · 2010/4/27
【 在 API 的大作中提到: 】 : 有什么办法可以每次在一个独立进程中启动一个程序?很多程序比如word,firefox都会进行进程检测,然后用之前起来的那个进程来打开之后的文档或窗口…… : 谢谢 : -- : ................... 在独立的程序中启动一个程序? CreateProcess? 父进程创建一个子进程? 楼主能不能解释下你想干啥? “很多程序比如word,firefox都会进行进程检测,然后用之前起来的那个进程来打开之后的文档或窗口”什么意思?
API机器人#2 · 2010/4/27
比如word吧 winword.exe a.doc 这时会有一个winword.exe进程 然后winword.exe b.doc 这时还是一个winword.exe进程,这个winword.exe是前一个winword.exe 第二个winword.exe的执行过程我猜测是这样的:如果检测到之前有进程(或实例),就让之前的进程打开后一个文档,然后自己退出。 但是word我知道有个办法可以创建独立进程 winword.exe a.doc /new(这里可以随便写参数) 这时会有一个winword.exe进程 然后winword.exe b.doc /new 这时会有另一个winword.exe进程
smilefufu机器人#3 · 2010/4/27
lz是想写一个程序,实现“只允许一个实例”的功能么? 可以参考《Windows核心编程》第三章3.3.3节中所介绍的,通过创建内核互斥对象,并为其命名来检测用户运行程序时,是否已经有本程序的实例在运行。然后接下来的处理就看你自己怎么设计了,是关掉原实例打开新实例,还是通知旧实例做啥事。 参考代码(我抄书的-,-) HANDLE h = CreateMutex(NULL, FALSE, TEXT("自己设计的,只有你的程序才会使用的一个互斥对象名")); if(GetLastError() == ERROR_ALREADY_EXISTS) { //已经有实例存在。 }
API机器人#4 · 2010/4/27
但是我想知道怎么避免这种情况,然后每次执行都会生成一个独立的进程…… 我就是想每次执行exe都是word那个例子的后一种情况……
smilefufu机器人#5 · 2010/4/28
呃,像傲游什么的,在设置里有一个“允许多实例”的选项。打开便是。 但如果那个程序本身在设计时就是不希望用户多开的话,那就比较麻烦了…… 如果是用的上面说到的那种方法的话,一个可行的思路是,在加载程序后,立即hook CreateMutex函数,然后修改其参数或者直接修改返回值(具体情况得逆向看一下这个程序具体判断流程),然后下面的那个if判断就不会成立了——唔,hook GetLastError估计也行,主要还是得根据逆向结果来看。 不过实现单实例的方法应该不止CreateMutex这一种。其他情况的话……我就说不上什么了…… PS:如果是想双开游戏的话……还要考虑如何过Game Guard的问题-_,- 【 在 API 的大作中提到: 】 : 但是我想知道怎么避免这种情况,然后每次执行都会生成一个独立的进程…… : 我就是想每次执行exe都是word那个例子的后一种情况…… : -- : ...................
API机器人#6 · 2010/4/29
我追过word的,word用的应该是COM组件的ROT来注册和检测其他实例的 但acrobat就没用ROT,估计是用mutex来做的 像你说的,这些方法可能还有很多。我就是想实现一种统一的方案,所有(或者大多数)应用程序都可以实现即可。 不知道从系统稍微底层的地方能不能动手脚,我现在想到开多个desktop来启动同一个应用程序,但就是使用上很别扭
smilefufu机器人#7 · 2010/4/30
说到从底层,我想到有个东西叫虚拟机…… 用现有的sandboxie应该可以搞定大多数的东西。 要不就自己写一个虚拟机(或者沙盘)。 win7用xp虚拟机模式双开估计也是能行 的。 【 在 API 的大作中提到: 】 : 我追过word的,word用的应该是COM组件的ROT来注册和检测其他实例的 : 但acrobat就没用ROT,估计是用mutex来做的 : 像你说的,这些方法可能还有很多。我就是想实现一种统一的方案,所有(或者大多数)应用程序都可以实现即可。 : ...................