C 将子进程作为父进程运行

C 将子进程作为父进程运行,c,windows,process,exec,C,Windows,Process,Exec,是否可以将子进程作为父进程运行 我的目录结构如下所示: app/program.exe app/bin/internal.exe app/bin/something.dll program.exe只执行带有一些参数的internal.exe #包括 #包括 内部主(空){ _execl(“.\\bin\\internal.exe”, “internal.exe”、“某些参数”、NULL); 返回0; } 这些论点很重要;没有它们,internal.exe就什么也做不了 这基本上可以正常

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

我的目录结构如下所示:

  • app/program.exe
    • app/bin/internal.exe
    • app/bin/something.dll
program.exe
只执行带有一些参数的
internal.exe

#包括
#包括
内部主(空){
_execl(“.\\bin\\internal.exe”,
“internal.exe”、“某些参数”、NULL);
返回0;
}
这些论点很重要;没有它们,
internal.exe
就什么也做不了

这基本上可以正常工作,但与任务栏的集成度不高。该程序在任务栏中显示为
internal.exe
,将其固定在任务栏上没有任何用处,因为单击固定的快捷方式将执行
internal.exe
,而不带参数,并且它将立即关闭

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


这可能吗?

您不能将子进程更改为实际进程的父进程。任务栏可以在更高的级别上工作,并为您提供更多的控制

:

以下项目描述了需要显式AppUserModelID的常见场景。他们还指出了应该使用多个显式AppUserModelId的情况

对于用户来说属于同一应用程序的协作或链接进程,应将相同的AppUserModelID应用于每个进程。示例包括具有启动器进程(链接)的游戏和Microsoft Windows Media Player,前者在一个进程中运行第一次运行/安装体验,而后者在另一个进程中运行主应用程序(协作)

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

如果是Java或其他类型的框架,则应设置
IsHostApp
值。如果没有,您可以尝试使用,但这些将不会更改AppUserModelID。设置
NoStartPage
将防止用户锁定子应用程序


如果您知道如何找到子应用程序的窗口,您可以在父应用程序中调用,并将id设置为相同的id和/或设置
System.AppUserModel.Relaunch*
properties。

excl将“program.exe”替换为“internal.exe”。换言之,“program.exe”被设置为存在。您可以尝试将第二个
\u exel()
参数从
“internal.exe”
更改为
“program.exe”
。这不会改变实际运行的程序,但它可能会改变任务栏上显示的内容。对,不幸的是,
spawn
函数系列并没有表现得更好(一些spawn模式保持父级模式,但子级仍然显示在任务栏中)。我希望有一些我不知道的winapi函数可以解决这个问题@JohnBollinger第二个arg似乎没有任何效果,尽管我认为实际显示的内容会缓存在注册表中。但更重要的是,“启动器”被固定并运行带有args的“内部”,真的。在program.exe中有什么意义?如果只有exec internal.exe和一些参数-这没有意义。如果internal.exe启动时没有参数,请使用此默认值args@RbMm我不是“internal.exe”的作者,也不想为了硬编码一些参数而创建一个修改过的源代码版本,这将是最后的手段。还有组织方面的原因(例如,我构建了两个版本的“internal.exe”,一个运行在控制台上进行调试,另一个不运行;这两个版本都将所有内容卸载到DLL。我希望保持根目录中没有多个exe和DLL)。非常有用,谢谢。我正在子进程中创建窗口,并在其上设置“重新启动”属性。应该足够好了,父进程可能可以保持不变(子进程是一个具有良好FFI的JIT编译器)。