修改exe文件使其在没有创建快捷方式的情况下启动带有命令行参数

7

我试图使用winapi方法修改一个exe文件。

我也不知道如何手动修改,所以如果有人能与我分享,那就是个好的开始,然后我可以尝试通过编程实现它。

基本上有这个exe文件:"C:\Program Files (x86)\Mozilla Firefox\firefox.exe"。 我将其复制并粘贴到:"C:\Program Files (x86)\Mozilla Firefox\SecondFirefox.exe"

我不想将其设置为快捷方式,因为任务栏上会出现一些奇怪的分离问题。

我想让"SecondFirefox.exe"使用默认命令行参数-P "Dev" -no-remote启动,这可能吗?

谢谢


3
不能直接地实现,但是您可以创建一个 .bat 文件来启动它,并在其中添加参数。 - Remy Lebeau
谢谢Remy,我已经这样做了,蝙蝠图标不同了,但是当Firefox启动时,它并没有遵循我转换为exe的新蝙蝠的图标。它会采用原始exe的图标。我甚至使用资源编辑器更改了原始文件名,但它仍然没有生效。 :( - Noitidart
1
你想要两个exe文件,每个文件都会启动不同的用户,且它们的图标不会在任务栏上合并在一起。对吗? - Ameen
1
谢谢@ameen,是的,我想尝试一下。我认为这将解决我的问题。我的问题详情:现在我有两个快捷方式,都指向“../firefox.exe”,但第二个快捷方式还有命令行参数,“../firefox.exe -P“Dev”-no-remote”,这会导致启动第二个Firefox实例。然而,启动的Firefox没有使用任务栏中快捷方式的图标,而是使用快捷方式所指向的exe文件的图标。 - Noitidart
这是完全正常的行为。快捷方式并不是在运行,而是可执行文件在运行,任务栏使用正在运行的进程的图标。 - Remy Lebeau
谢谢@RemyLebeau,有没有什么方法可以欺骗它?我在考虑使用这种方法设置System.AppUserModel.RelaunchIconResource:http://blogs.msdn.com/b/oldnewthing/archive/2011/06/01/10170113.aspx - Noitidart
2个回答

3

制作可执行文件的副本似乎不是个好主意。为什么要有两个相同的东西呢。

我建议制作一个启动程序,这个程序非常简单,除了使用修改后的命令行启动原始可执行文件之外,没有其他功能。


感谢David的回复。因为如果您使用命令行参数-no-remote -P "<name_of_profile_here>"启动Firefox,您可以并行运行多个配置文件 https://github.com/Mozilla-Student-Projects/Projects-Tracker/issues/72#issuecomment-32677515 。现在我在我的任务栏上有一堆Firefox图标,但它们都有相同的图标,我正在尝试使其每个配置文件使用不同的图标。我尝试了那个启动器,我制作了一个批处理文件并将其放入@echo off start "" "firefox.exe",然后编译了bat到exe并给它图标。它会启动并弹出Firefox,旁边还有奇怪的东西。 - Noitidart
1
我真的不理解那个评论。编写一个简单的程序,调用CreateProcess并传递任何命令行参数。 - David Heffernan
抱歉,我错过了你的回复。我在主题帖上方发表了评论,可能会有所帮助,请查看:#comment44174230_27882708。 - Noitidart
你接受的答案并没有回答你所提出的问题。 - David Heffernan

3
这不会回答你关于如何做的问题,但它应该给你一个关于正在发生什么的线索。
Windows 使用称为“应用程序 ID”的属性来标识窗口、进程和快捷方式。通过使用此ID,Windows 可以确定任务栏按钮与窗口和应用程序相关联的方式,以及系统如何决定一个应用程序是否需要两个任务栏按钮来表示其不同的窗口,或者多个应用程序是否需要共享一个任务栏按钮。
但是,这些 ID 可以由应用程序进行自定义,这意味着应用程序仍然可以指定两个窗口是否共享相同的图标。
我创建了一个小的可执行文件,然后复制它并一起启动,结果是每个文件都有自己的图标。
但如果是 Firefox,情况就不同了。
很可能 Firefox 正在更改所有运行实例的应用程序 ID,使其成为一个应用程序 ID,这就是为什么所有 Firefox 任务栏图标都组合在一起的原因。
虽然你尝试自己构建它,但并不容易。
我不确定,因为我不想阅读源代码,但你仍然可以检查一下是否正确。
请查看此链接以获取有关任务栏 API 的更多信息。

谢谢,ameen!这真是一个很好的解决方案,让我知道了发生了什么。你能解释一下应用程序是如何查找要使用的图标的吗?改变AppUserModel.RelaunchIconResource会改变与之相关联的图标吗?http://msdn.microsoft.com/en-us/library/dd391573%28v=vs.85%29.aspx我会用IPropertyStore来改变它:http://blogs.msdn.com/b/oldnewthing/archive/2011/06/01/10170113.aspx - Noitidart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接