【问题标题】:Multiapp Taskbar Grouping on Windows 7+Windows 7+ 上的多应用任务栏分组
【发布时间】:2014-12-12 08:49:56
【问题描述】:

让我来布置场景。

我们有一个第 3 方应用程序(例如,安装到 C:\App 的 app.exe)。它实际上不能直接运行,它需要一个配置文件作为参数传递给它:“C:\App\app.exe config.ini”。每个人都已经有了包含必要参数的快捷方式。

此应用程序支持插件,我们已经开发了一些插件。为了分发上述插件,需要将它们复制到每个用户的 C:\App\Plugin\ 文件夹中,因此当进行更改时,我必须前往每个人的办公桌并确保更新得到应用。

这很麻烦,所以我开发了一个应用程序,它将扫描网络文件夹并将其与它的内部文件数据库进行比较。如果有任何更改,它会将文件复制到正确的目标文件夹。

但这并不是无缝的,因为用户必须确保 app.exe 已关闭 - 运行我的更新程序,然后重新运行 app.exe。所以我将原来的 app.exe 重命名为 app_launcher.exe,并将我的更新程序重命名为 app.exe。我修改了我的更新程序以支持参数,并在更新完成后将它们传递给 app_launcher.exe。一旦 app_launcher.exe 启动,更新程序就会关闭。

我应该注意 - 以上确实有效。

问题来自将应用快捷方式固定到任务栏的用户。一旦真正的应用程序最终启动,它就会在任务栏上获得自己的新图标,而不是与原始快捷方式分组。这实际上是有道理的,因为它们在技术上是两个不同的应用程序。然而,用户不喜欢这样。

我对此进行了一些研究,发现了一些可以让您将多个程序(垃圾箱/围栏)分组的第三方程序。我不想要这个。

更多的研究发现了一个叫做 AppUserModelID 的东西,这让我很感兴趣。在玩了一些之后,我让我的更新程序设置了它自己的 AppUserModelID。原始 app.exe 没有设置它的 AppUserModelID(通过 ProcessHacker 发现),但我能够通过 kernel32.dll 中的 CreateProcess 方法让更新程序使用它使用的相同 ID 启动它。

这不起作用。更新程序在它自己的固定图标下启动,原始应用程序启动一个新图标。我调整了更新程序以保持打开状态,直到原始应用程序关闭,看看这是否有所作为。这次它在自己的固定图标下启动,原始应用程序启动它自己的,然后更新程序窗口切换到与新图标下的原始应用程序分组。所以 AppUserModelID 确实将它们组合在一起,但不是我想要的。

我将 C# 用于更新程序应用程序,无法更改(或更改)原始应用程序。

如何让这些应用程序在固定的快捷方式下分组?有没有可能?

【问题讨论】:

    标签: c# windows-7 taskbar


    【解决方案1】:

    我想我可能已经找到了解决方案,虽然它有点小技巧。

    问题来自于最终应用程序与正在运行的快捷方式不匹配。

    因此,我没有替换 EXE 并在完成后运行真正的 EXE,而是确保更新程序应用程序始终在真正的 exe 之前运行。

    唯一需要注意的是,它还可以为系统上的每个 exe 运行(通过 HKCR\exefile)。第一个参数现在是真正可执行文件的路径,如果它与应用程序匹配,它将运行更新程序。一旦更新程序完成,或者如果它是任何其他应用程序,它就会运行它。

    不是一个理想的解决方案(因为它可能被检测为恶意软件),但它应该对我们有用。

    【讨论】:

    • OK - 这个解决方案也不能很好地工作。它会阻止某些系统工具运行。启动时的一些英特尔程序(igfx 的东西)以及 msconfig。显然更新程序在通过这些程序触发时认为这些程序不存在。
    猜你喜欢
    • 2012-08-01
    • 2011-03-24
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多