【发布时间】:2011-02-25 08:15:47
【问题描述】:
我有一个 VB6 可执行文件,我们将其用作我们实际程序的 Starter 可执行文件。
问题是windows 7在任务栏中为新进程显示了一个新图标,而不是我点击启动程序的那个图标(当然,因为starter exe已经结束,新的exe似乎成为一个新程序)。
目前我使用 Shell 对象来启动另一个 exe。有没有更好的方法从 vb6 中做到这一点,也许是通过使用带有声明的本机 C 函数在当前进程中启动一个 exe,而不产生新进程?
编辑:
感谢 atzz 提供有关应用程序模型 ID 的重要信息。现在,我的应用程序启动器的快捷方式具有明确定义的 ID,并且我的应用程序还在启动时设置了 ID,现在可以从工具栏中的右侧图标精美地访问。但是,仍然存在两个问题:
该应用程序是使用 Exe4J 启动的 Java 应用程序,在 Exe4J 显示启动画面之前我没有任何机会设置 AppID,因此在显示启动画面时任务栏中有第二个图标。
如果我不手动将启动应用程序图标从桌面拖动到工具栏,而是使用我的应用程序图标并将其设置为“粘性”,则实际应用程序会被粘贴,而不是启动器。
如果我的启动器从自己的进程中启动应用程序,这两个问题都会得到很好的解决。我听说在 linux 程序中使用 exec() 而不是 fork() 来实现这一点...... windows 有类似的东西吗?
【问题讨论】:
-
我不知道有什么方法可以在当前进程中启动不同的可执行文件。为什么需要使用用 VB 6 编写的单独的加载程序应用程序?这解决了什么问题?
-
检查是否有可用更新的问题。如果我从主可执行文件中检查,我不能自己覆盖它。此外,这可确保始终可以更新有缺陷的主可执行文件。
-
您可能不想在 Windows 机器上让正在运行的进程切换其中的实际可执行代码。有办法,但任何病毒/恶意软件扫描程序都会发疯(基本上你的问题完美地描述了恶意代码是如何试图传播的)。坚持使用启动器 - 对于您描述的情况/目标,这是一个完全可以接受的解决方案。
-
我不想注入代码,我只想设置另一个进程的Application User Model ID!应该有一个 API...
标签: winapi windows-7 vb6 executable taskbar