将子进程作为父进程运行

时间:2019-05-31 20:08:33

标签: c windows process exec

是否可以将子进程作为父进程运行?

我的目录结构如下:

  • app / program.exe
    • app / bin / internal.exe
    • app / bin / something.dll

program.exe仅使用一些参数执行internal.exe

#include <stdio.h> 
#include <process.h> 

int main(void) {
    _execl(".\\bin\\internal.exe",
        "internal.exe", "some args", NULL);

    return 0;
}

论点很重要;没有他们internal.exe不会做任何事情。

大多数情况下都可以,但是不能与任务栏很好地集成。该程序在任务栏中显示为internal.exe,并将其固定在任务栏上没有用,因为单击固定的快捷方式将执行internal.exe,而无需添加参数,并且会立即关闭。

我希望它以program.exe的形式显示在任务栏上,以便将其固定在任务栏上可以固定工作的“启动器”,而不是内部零件。

这可能吗?

1 个答案:

答案 0 :(得分:1)

就实际流程而言,您不能将孩子变成父母。任务栏在更高级别上起作用,并为您提供更多控制权。

MSDN says

  

以下各项描述了需要明确的AppUserModelID 的常见方案。他们还指出了应该使用多个显式AppUserModelID的情况。

     

...

     

对用户而言,属于同一应用程序的协作或链接流程应将相同的AppUserModelID应用于每个流程。例如带有启动程序进程(链接)和Microsoft Windows Media Player的游戏,Microsoft Windows Media Player具有在一个进程中运行的首次运行/设置经验,而主应用程序在另一个进程中(合作)运行。

如果您不是子应用程序的作者,事情将会变得复杂。

如果是Java或其他类型的框架,则应设置IsHostApp值。否则,您可以尝试使用UseExecutableForTaskbarGroupIcon and TaskbarGroupIcon进行播放,但是这些操作不会更改AppUserModelID。设置NoStartPage将阻止用户固定子应用程序。

如果您知道如何找到子应用程序的窗口,则可以在父级中调用SHGetPropertyStoreForWindow并将ID设置为相同的id as your parent process和/或设置System.AppUserModel.Relaunch*属性。